Usando PostgreSQL, preciso extrair um valor de JSON, que pode estar em vários caminhos diferentes. Por exemplo, considere os seguintes JSONs:
{"a": 1, "b": 2, "c": 3}
e
{"a": 1, "b": 2, "d": 4}
Preciso extrair campos c
ou d
, obtendo 3 e 4 respectivamente.
Eu poderia usar uma notação de colchetes JSONPath para união, mas infelizmente, a implementação do PostgreSQL a usa somente para arrays .
Então, a ideia funciona em arrays:
> SELECT JSON_QUERY(jsonb '[1, 2, 3]', '$[3, 2]' ERROR ON ERROR)
3
Mas não funciona no meu caso:
> SELECT JSON_QUERY(jsonb '{"a": 1, "b": 2, "c": 3}', '$["a"]' ERROR ON ERROR)
SQL Error [22033]: ERROR: jsonpath array subscript is not a single numeric value
Há alguma maneira de executar essa tarefa com uma expressão JSONPath?
Eu gostaria de usar essa expressão na JSON_TABLE
chamada. Claro, há uma opção para avaliar cada expressão separadamente e, em seguida, usar COALESCE
em SQL simples, mas isso
- Adiciona uma etapa de transformação separada
- Requer verificação manual se apenas um valor foi encontrado. Com
ERROR ON ERROR
, tenho o PostgreSQL verificando isso para mim
Então, eu gostaria de evitar essa solução alternativa, se possível.