Em um banco de dados postgresql, tenho uma tabela com 2 colunas:
A coluna1 é do tipo VARCHAR e contém várias linhas de ids neste formato: ID1123312
A coluna2 é do tipo JSONB e contém várias linhas de jsons que possuem esta estrutura:
{
"a": [
{
"a1": "2022-01-01",
"a2": "2026-01-31",
"a3": 1
}
],
"b": [
{
"b1": "J",
"b2": "1231342138adc2fehj3j21321321321kjk1423j32k9"
}
],
"c": [
{
"c1-1": "2021-02-01",
"c1-2": "2021-01-01"
},
{
"c2-1": "2021-04-01",
"c2-2": "2021-03-01"
}
]
}
Eu preciso construir uma instrução SELECT para retornar apenas os valores da propriedade b2 de todas as linhas da Coluna2. Se tiver apenas uma linha, então apenas '1231342138adc2fehj3j21321321321kjk1423j32k9'. Se tiver várias linhas, qualquer valor que encontrar dentro de cada jsonb dentro de cada linha.
Qualquer ajuda é muito apreciada.
Eu tentei:
SELECT *
FROM t
WHERE jsonb_path_exists(t.jsonColumn, '$.b[*].b2 ? (@ == "1231342138adc2fehj3j21321321321kjk1423j32k9")')
SELECT * retorna a linha inteira da tabela, mas não sei como instruí-la a retornar apenas qualquer valor que a propriedade b2 contenha (aninhada dentro do json da linha).
Parece que você tem apenas um único objeto em cada
b
array. Portanto, você não precisa de uma consulta de caminho, você pode usar acessadores JSON normais.->
recupera um valor comojson(b)
e->>
o recupera como textodb<>violino