在Postgres jsonb列中查询数组对象

时间:2019-01-07 21:16:49

标签: arrays postgresql psql jsonb postgres-9.6

我有一个包含2列“节点”和“时间戳”的Postgres表。“节点”列的类型为jsonb,并且是以下格式的对象数组:

[
    {
        "addr": {},
        "node_number": "1",
        "primary": false
    },
    {
        "addr": {},
        "node_number": "2",
        "primary": true
    },
]

我想在此数组中找到最近行中有"primary":true的对象。如果以上是最新行,则结果应为:

{
    "addr": { },
    "node_number": "2",
    "primary": true
}

我尝试过:

SELECT(nodes -> 0) FROM table WHERE nodes @> '[{"primary": true}]'
order by timestamp desc
limit 1;

赋予数组索引0的对象,而不是具有"primary": true的所需对象。

如何实现查询?

1 个答案:

答案 0 :(得分:1)

在横向联接中使用jsonb_array_elements()

select elem
from my_table 
cross join jsonb_array_elements(nodes) as elem
where (elem->>'primary')::boolean

                       elem                        
---------------------------------------------------
 {"addr": {}, "primary": true, "node_number": "2"}
(1 row)