展开Postgresql嵌套数组Json字段
我有一个表log_表,在这个表中有一个嵌套的数组json字段activities。通过使用这个活动字段,我想规范化我的行 日志表:展开Postgresql嵌套数组Json字段,json,postgresql,Json,Postgresql,我有一个表log_表,在这个表中有一个嵌套的数组json字段activities。通过使用这个活动字段,我想规范化我的行 日志表: - id:long - activities:json - date:timestamp 示例活动字段: [ { "actionType":"NOTIFICATION", "items":null }, { "actionType":"MUTATION", "items":[
- id:long
- activities:json
- date:timestamp
示例活动字段:
[
{
"actionType":"NOTIFICATION",
"items":null
},
{
"actionType":"MUTATION",
"items":[
{
"id":387015007,
"name":"epic",
"value":{
"currency":"USD",
"amount":1.76
}
},
{
"id":386521039,
"name":"test",
"value":{
"currency":"USD",
"amount":1.76
}
}
]
}
]
作为询问,我尝试了:
select
*
from
log_table l,
json_array_elements(l.activities) elems,
json_array_elements(elems->'items') obj;
通过此查询,我得到如下错误:
ERROR: cannot call json_array_elements on a scalar
有什么建议吗?缺少项目应标记为[null],而不是null。您可以使用大小写表达式来更正此问题,例如:
select elems->>'actionType' as action_type, obj
from log_table
cross join jsonb_array_elements(l.activities::jsonb) elems
cross join jsonb_array_elements(case elems->'items' when 'null' then '[null]' else elems->'items' end) obj
action_type | obj
--------------+---------------------------------------------------------------------------------
NOTIFICATION | null
MUTATION | {"id": 387015007, "name": "epic", "value": {"amount": 1.76, "currency": "USD"}}
MUTATION | {"id": 386521039, "name": "test", "value": {"amount": 1.76, "currency": "USD"}}
(3 rows)
谢谢你的回答;我也很好奇。我如何在这里为日志->活动->操作类型->id创建索引。这里没有可以使用的索引类型。