繁体   English   中英

Postgres JSONB - 查询所有根键

[英]Postgres JSONB - query all root keys

PostgreSQL (13.2)

我有一个包含 2 列的表 - 时间戳和快照。 快照包含一个 JSONB - 表示仓库状况的字典。 数据结构是这样的

{
    "key1": {...},
    "key2": {...},
    "key3": {...},
    "key4": {...},
    "key5": {...}
}

所以我需要在 json 中获取包含我正在寻找的数据的特定密钥。 我还需要获取保存快照的行时间戳。 我该如何查询这个?

附言。 在 python 中,我可以使用 dict.keys 之类的东西,然后开始循环遍历所有键,在这里我需要类似的东西来搜索数据。

pps。 知道如何用 SQLAlchemy 实现它也会很有趣

[来自 DB 查看器的屏幕截图]

1

(jsonb_each()).* 从 jsonb 字段中选择所有键和值:

SELECT (JSONB_EACH(blocks)).*
FROM snapshots

然后我们需要通过嵌套键获取值:

SELECT key AS rack_num
     , value ->> 'client_id' AS client_id
     , value ->> 'timestamp' AS _TIMESTAMP
FROM (
      SELECT (JSONB_EACH(blocks)).*
      FROM snapshots
     ) AS t

最后,汇总结果:

SELECT rack_num
       , MIN(_TIMESTAMP) AS appearance_time
FROM (
      SELECT KEY                   AS rack_num
           , VALUE ->> 'client_id' AS client_id
           , VALUE ->> 'timestamp' AS _TIMESTAMP
      FROM (
            SELECT (JSONB_EACH(blocks)).*
            FROM snapshots
           ) AS t
      ) AS racks
WHERE client_id = :client_id
GROUP BY rack_num, client_id
ORDER BY MIN(_TIMESTAMP) DESC;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM