我在 Postgres 中有一个表并尝试查询JSON
类型列data_meta & source_data
request_id | bbb1-bdfa3ae765a2
job_type | Incoming
data_meta | {"data_type": "Insurance", "technology": "XYZ", "timestamp_column_name": "JOBTIME"}
source_data | [{"vendor": "ABCD", "name": "MAPPING_FILE", "data_type": "Insurance"}]
status | OK
SELECT * FROM job_request_table p, json_array_elements(p.data_meta) as element
where element->'data_type' ='Insurance';
得到这个:
ERROR: operator does not exist: json = unknown
LINE 2: where element->'data_type' ='Insurance';
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
vendor='ABCD'
如果我必须在另一个JSON
类型列中搜索,查询是否会有变化"source_data"
您需要
text
使用->>
运算符提取值(->
返回json
值)。但是,鉴于您的示例数据,这将导致错误“无法从对象中提取元素”,因为 的内容
data_meta
不是数组。如果要测试 JSON 值是否包含特定的键/值对,请使用
@>
- 但只能与 一起使用jsonb
,因此您需要转换列:您也可以使用它来检查数组内部
source_data
(但再次需要强制转换jsonb
):从长远来看,我建议将两列都更改为
jsonb