展开嵌套数组 postgres
Expand nested arrays postgres
我有一个 jsonb 专栏,进度,在 table 上(称之为 t)。它有这样的数据:
{
"2": {
"8": "completed",
"9": "completed",
"10": "completed",
"percent_completed": 0
},
"5": {
"40": "completed",
"percent_completed": 0
}
}
我正在尝试 table 看起来像:
Top Level | Send Level | status
-------------------------------
| 2 | 8 | completed
| 2 | 9 | completed
| 2 | 10 | completed
| 5 | 40 | completed
我正在努力寻找一个有效的声明。我快到了(我可以得到顶级列),但我无法获得二级。这适用于提取第一个密钥:
select top_level
, progress
from t
cross join jsonb_object_keys(progress) top_level
当我尝试获得第二级时,它不起作用。我很难回答为什么:
select top_level
, second_level
, t
from t
cross join jsonb_object_keys(progress) top_level
cross join jsonb_object_keys(progress->top_level) second_level
我收到以下错误:ERROR: cannot call jsonb_object_keys on a scalar
我正在使用 Postgres 11.8
我尝试了不同的 json 运算符并以多种不同的方式转换结果数据,但我正在努力弄清楚。非常感谢您的帮助。
使用jsonb_each()
和jsonb_each_text()
代替jsonb_object_keys()
:
select
t1.key as top_level,
t2.key as send_level,
t2.value as value
from t
cross join jsonb_each(progress) as t1
cross join jsonb_each_text(t1.value) as t2
where t2.key <> 'percent_completed'
的文档
我有一个 jsonb 专栏,进度,在 table 上(称之为 t)。它有这样的数据:
{
"2": {
"8": "completed",
"9": "completed",
"10": "completed",
"percent_completed": 0
},
"5": {
"40": "completed",
"percent_completed": 0
}
}
我正在尝试 table 看起来像:
Top Level | Send Level | status
-------------------------------
| 2 | 8 | completed
| 2 | 9 | completed
| 2 | 10 | completed
| 5 | 40 | completed
我正在努力寻找一个有效的声明。我快到了(我可以得到顶级列),但我无法获得二级。这适用于提取第一个密钥:
select top_level
, progress
from t
cross join jsonb_object_keys(progress) top_level
当我尝试获得第二级时,它不起作用。我很难回答为什么:
select top_level
, second_level
, t
from t
cross join jsonb_object_keys(progress) top_level
cross join jsonb_object_keys(progress->top_level) second_level
我收到以下错误:ERROR: cannot call jsonb_object_keys on a scalar
我正在使用 Postgres 11.8
我尝试了不同的 json 运算符并以多种不同的方式转换结果数据,但我正在努力弄清楚。非常感谢您的帮助。
使用jsonb_each()
和jsonb_each_text()
代替jsonb_object_keys()
:
select
t1.key as top_level,
t2.key as send_level,
t2.value as value
from t
cross join jsonb_each(progress) as t1
cross join jsonb_each_text(t1.value) as t2
where t2.key <> 'percent_completed'
的文档