繁体   English   中英

查询保存在Postgres中的Json数据

[英]Query Json data saved in Postgres

我正在尝试查询保存在postgres中的JSON数据。 这就是创建表的方式

CREATE TABLE ALARMDATA2(ALARM        CHAR(1300))

这是JSON对象:

{"delay_max": 0.0, "ts_errors": [{"count": 0, "state": 0, "is_priority1": true, "name": "SYNC", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "BYTE", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PAT", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "CC", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PMT", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PID", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": false, "name": "TS", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "CRC", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PCR", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "ACC", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PTS", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "CAT", "is_priority2": true}], "is_stream_paused": false, "delay_min": 0.0, "ac_err": 0.0, "oj_err": 0.0}

我想基于“ delay_max”(JSON中的第一个条目)进行查询。 我正在使用此查询

SELECT ALARM->>'delay_max' AS delay_max FROM alarmdata2;

我认为根据这些链接( 这里这里 ),查询语法是可以的,但是我收到此错误

提示:没有运算符匹配给定的名称和参数类型。 您可能需要添加显式类型转换。

我已经搜索了一段时间,但没有头绪。 有什么建议吗?

您必须将ALARM列定义为JSON或JSONB类型:

CREATE TABLE ALARMDATA2(ALARM JSONB)

然后它将起作用。

解决问题

ALTER TABLE alarmdata2
ALTER COLUMN alarm
  TYPE jsonb
  USING alarm::jsonb;

或者,解决它

SELECT ALARM::jsonb->>'delay_max' AS delay_max
FROM alarmdata2;

暂无
暂无

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

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