PostgreSQL - 将数据从 jsonb 数组移动到分隔 table
PostgreSQL - Move data from jsonb array to separate table
在我的 PostgreSQL 数据库中,我有以下架构:
CREATE TABLE slides (
id integer,
question jsonb DEFAULT '{}'::jsonb
);
CREATE TABLE suggestions (
id integer,
slide_id integer,
suggestion_text text
);
INSERT INTO slides (id, question)
VALUES (1, '{"suggestions": ["Suggestion 1", "Suggestion 2"]}');
现在我想将 question->>'suggestions'
移动到 suggestions
table。所以
SELECT * FROM suggestions;
应该 return:
------------------------------------------------------------------
id | suggestion_test | slide_id
------------------------------------------------------------------
1 | Suggestion 1 | 1
2 | Suggestion 2 | 1
我如何在 PostgreSQL 中执行此操作?这是您可以试验的 DBfiddle:
https://www.db-fiddle.com/f/oEQf7ntttV5Wu9wyiXbEFk/0
您可以使用 jsonb_array_elements()
:
select jsonb_array_elements(question->'suggestions')
from slides;
我认为 suggestions.id
列应该是 serial
:
CREATE TABLE suggestions (
id serial,
slide_id integer,
suggestion_text text
);
使用函数jsonb_array_elements_text()
.
insert into suggestions(slide_id, suggestion_text)
select
id as slide_id,
value as suggestion_text
from slides
cross join jsonb_array_elements_text(question->'suggestions');
在我的 PostgreSQL 数据库中,我有以下架构:
CREATE TABLE slides (
id integer,
question jsonb DEFAULT '{}'::jsonb
);
CREATE TABLE suggestions (
id integer,
slide_id integer,
suggestion_text text
);
INSERT INTO slides (id, question)
VALUES (1, '{"suggestions": ["Suggestion 1", "Suggestion 2"]}');
现在我想将 question->>'suggestions'
移动到 suggestions
table。所以
SELECT * FROM suggestions;
应该 return:
------------------------------------------------------------------
id | suggestion_test | slide_id
------------------------------------------------------------------
1 | Suggestion 1 | 1
2 | Suggestion 2 | 1
我如何在 PostgreSQL 中执行此操作?这是您可以试验的 DBfiddle: https://www.db-fiddle.com/f/oEQf7ntttV5Wu9wyiXbEFk/0
您可以使用 jsonb_array_elements()
:
select jsonb_array_elements(question->'suggestions')
from slides;
我认为 suggestions.id
列应该是 serial
:
CREATE TABLE suggestions (
id serial,
slide_id integer,
suggestion_text text
);
使用函数jsonb_array_elements_text()
.
insert into suggestions(slide_id, suggestion_text)
select
id as slide_id,
value as suggestion_text
from slides
cross join jsonb_array_elements_text(question->'suggestions');