在 SELECT 查询结果中展开嵌套的 JSONB 数据

Expand nested JSONB data in SELECT query result

假设我有一个 table 和 JSONB 数据:

create table x (
  id integer primary key generated always as identity,
  name text,
  data jsonb
);

假设数据可以有嵌套数据,我想显示数据中的所有数据以获得这种结果:

id  name  data.a  data.b.0  data.b.1  data.c
1   test  1       foo       bar       baz
2   test2 789     pim       pam       boom

有没有办法在不指定所有 JSONB 属性名称的情况下执行此操作?

JSONB_TO_RECORDSET() 函数可能会在这样的 Select 语句中使用

SELECT a AS "data.a", 
      (b::JSONB) ->> 0 AS "data.b.0", (b::JSONB) ->> 1 AS "data.b.1",
       c AS "data.c"
  FROM x, 
       JSONB_TO_RECORDSET(data) AS j(a INT, b TEXT, c TEXT)
 ORDER BY id

假设您在数据列中有这样的 JSONB 值

[ { "a": 1, "b": ["foo","bar"], "c": "baz" }]
[ { "a": 789, "b": ["pim","pam"], "c": "boom" }]

Demo