Eu tenho uma tabela no Postgres e estou tentando consultar um JSON
tipo de colunasdata_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';
e obtendo isso:
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.
haverá uma mudança na consulta se eu tiver que procurar vendor='ABCD'
em outra JSON
coluna de tipo"source_data"
Você precisa extrair o valor como
text
é feito usando o->>
operador (->
retorna umjson
valor).No entanto, dados seus dados de exemplo, isso resultaria no erro " não é possível extrair elementos de um objeto ", pois o conteúdo de
data_meta
não é uma matriz.Se você quiser testar se um valor JSON contém um par chave/valor específico, use
@>
- mas isso só pode ser usado comjsonb
, então você precisa converter a coluna:Você pode usar isso também para verificar dentro do array
source_data
(mas novamentejsonb
é necessário um cast para):A longo prazo, eu recomendaria alterar ambas as colunas para
jsonb