Trong cơ sở dữ liệu Postgres 9.3 Tôi có một bảng trong đó một cột chứa JSON, như trong bảng thử nghiệm được hiển thị trong ví dụ bên dưới.Postgres: Mở rộng cột JSON thành các hàng
test=# create table things (id serial PRIMARY KEY, details json, other_field text);
CREATE TABLE
test=# \d things
Table "public.things"
Column | Type | Modifiers
-------------+---------+-----------------------------------------------------
id | integer | not null default nextval('things_id_seq'::regclass)
details | json |
other_field | text |
Indexes:
"things_pkey" PRIMARY KEY, btree (id)
test=# insert into things (details, other_field)
values ('[{"json1": 123, "json2": 456},{"json1": 124, "json2": 457}]', 'nonsense');
INSERT 0 1
test=# insert into things (details, other_field)
values ('[{"json1": 234, "json2": 567}]', 'piffle');
INSERT 0 1
test=# select * from things;
id | details | other_field
----+-------------------------------------------------------------+-------------
1 | [{"json1": 123, "json2": 456},{"json1": 124, "json2": 457}] | nonsense
2 | [{"json1": 234, "json2": 567}] | piffle
(2 rows)
JSON luôn là mảng chứa số lượng băm thay đổi. Mỗi băm luôn có cùng một bộ khóa. Tôi đang cố gắng để viết một truy vấn mà trả về một hàng cho mỗi mục trong mảng JSON, với các cột cho mỗi khóa băm và id từ bảng điều. Tôi hy vọng sản lượng như sau:
thing_id | json1 | json2
----------+-------+-------
1 | 123 | 456
1 | 124 | 457
2 | 234 | 567
tức là hai hàng cho các mục có hai mục trong mảng JSON. Có thể nhận được Postgres để làm điều này? json_populate_recordset
giống như một phần quan trọng của câu trả lời, nhưng tôi không thể làm cho nó hoạt động với nhiều hơn một hàng cùng một lúc.