postgresql 从 json 插入到 select
postgresql insert into select from json
是否可以在不指定列的情况下从 PostgreSQL 中的 json 字典插入到 table?
假设有一个 table books_1:
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" }');
我想将其插入到具有完全相同的列和数据类型的 table 中,例如:
CREATE TABLE books_2 ( name varchar(100), author varchar(100) );
理想情况下我会执行:
INSERT INTO books_2
SELECT something_json(data) FROM books_1
背景:
使用标准的 PostgreSQL,我可以轻松地制作 JSON table 转储。我也可以导入它们,但它们被导入为 jsonb.
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。我可以通过指定所有列来做到这一点,但由于有很多 table 和列,我真的不想这样做。应该没有必要,因为列都是一样的。
我可能正在寻找 returns 基于 json 中的键的列列表的函数。我想顺序必须相同。但是由于导出也是从 PostgreSQL 完成的,这可能是有保证的。
您可以将 json_populate_record
与目标的行类型一起使用 table:
INSERT INTO books_2
SELECT rec.* FROM books_1, json_populate_record(null::books_2, books_1.data) rec;
是否可以在不指定列的情况下从 PostgreSQL 中的 json 字典插入到 table?
假设有一个 table books_1:
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" }');
我想将其插入到具有完全相同的列和数据类型的 table 中,例如:
CREATE TABLE books_2 ( name varchar(100), author varchar(100) );
理想情况下我会执行:
INSERT INTO books_2
SELECT something_json(data) FROM books_1
背景: 使用标准的 PostgreSQL,我可以轻松地制作 JSON table 转储。我也可以导入它们,但它们被导入为 jsonb.
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。我可以通过指定所有列来做到这一点,但由于有很多 table 和列,我真的不想这样做。应该没有必要,因为列都是一样的。
我可能正在寻找 returns 基于 json 中的键的列列表的函数。我想顺序必须相同。但是由于导出也是从 PostgreSQL 完成的,这可能是有保证的。
您可以将 json_populate_record
与目标的行类型一起使用 table:
INSERT INTO books_2
SELECT rec.* FROM books_1, json_populate_record(null::books_2, books_1.data) rec;