首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql insert postgresql from json

postgresql insert postgresql from json
EN

Stack Overflow用户
提问于 2019-12-01 21:13:29
回答 1查看 51关注 0票数 0

在PostgreSQL中,可以在不指定列的情况下从json字典向表中插入内容吗?

假设有一个表books_1:

代码语言:javascript
复制
CREATE TABLE books_1 ( data json );
INSERT INTO books VALUES ('{ "name": "Book the First", "author": "Bob White" }');
INSERT INTO books VALUES ('{ "name": "Book the Second", "author": "Charles Xavier" }');
INSERT INTO books VALUES ('{ "name": "Book the Third", "author": "Jim Brown" }');

我希望将其插入到具有完全相同的列和数据类型的表中,例如:

代码语言:javascript
复制
CREATE TABLE books_2 ( name varchar(100), author varchar(100) );

理想情况下,我会执行:

代码语言:javascript
复制
INSERT INTO books_2
SELECT something_json(data) FROM books_1

背景:使用标准的PostgreSQL,我可以很容易地创建JSON表转储。我也可以导入它们,但它们是作为jsonb导入的。

代码语言:javascript
复制
COPY ( SELECT ROW_TO_JSON(t) FROM (SELECT * FROM books_2) t) TO 'C:\Users\Public\books.json';

CREATE TABLE books_1 ( j jsonb );
COPY t FROM 'C:\Users\Public\books.json';

我想将json重新导入到'regular‘属性中,而不是json。我可以通过指定所有的列来做到这一点,但是因为有很多表和列,所以我真的不想这么做。应该没有必要,因为列无论如何都是一样的。

我可能正在寻找一个函数,它根据json中的键返回列的列表。我想顺序应该是一样的。但由于导出也是从PostgreSQL完成的,这可能是有保证的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-01 21:39:27

您可以将json_populate_record与目标表的行类型一起使用:

代码语言:javascript
复制
INSERT INTO books_2
SELECT rec.* FROM books_1, json_populate_record(null::books_2, books_1.data) rec;

(online demo)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59125843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档