在 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"}}';
我的 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"}}';