在 JSON 中搜索 Postgres

Postgres search in JSON

我的 probe_table 看起来像这样:

编号 | my_metadata

probe 列是 JSON,具有以下内容:

{
  "myProbe": {
    "someField": "20",
    "ip": "1.1.1.1",
  }
} 

我正在尝试在所有 probe 列中搜索特定 IP。

我试过:

SELECT * 
      FROM probe_table
      WHERE probe @> '{"myProbe":{"ip": "1.1.1.1"}}';

错误:运算符不存在:文本@> 未知

还有这个:

SELECT * FROM probe_table WHERE probe->myProbe->>ip = '1.1.1.1'

错误:列 "myProbe" 不存在

知道我错过了什么吗?

您需要为 ->->> 运算符的参数使用单引号。消息“operator does not exist: text @> unknown”表示您的列的类型为 text 而不是 json(或 jsonb应该是),所以你需要投它:

SELECT * 
FROM probe_table 
WHERE probe::jsonb -> 'myProbe' ->> 'ip' = '1.1.1.1'

或者

SELECT * 
FROM probe_table
WHERE probe::jsonb @> '{"myProbe":{"ip": "1.1.1.1"}}';