PostgreSQL запрос по JSON объекту в массиве - PullRequest
1 голос
/ 28 апреля 2020

Народ,

У меня есть следующая таблица в моем PostgreSQL.

CREATE TABLE public.my_table
(
    id uuid NOT NULL,
    name character varying(50) NOT NULL,
    field1 jsonb NOT NULL
)

Я храню массив JSON в моем поле1, как показано ниже:

[
    {
        "id": "abc"
    },
    {
        "id": "def"
    },
    {
        "id": "ghi"
    }
]

У меня вопрос: как мне запросить строки, которые содержат указанный c «id» в этом массиве JSON?

Спасибо за вашу помощь! Ура!

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Один вариант использует exists и jsonb_array_elements():

select *
from my_table t
where exists (
    select 1 from jsonb_array_elements(t.field1) f(obj) where f.obj ->> 'id' = 'abc'
)
0 голосов
/ 28 апреля 2020

Вы можете использовать оператор содержимого:

select * from my_table where field1 @> '[{"id":"whatever"}]'

Эта операция может использовать индекс для field1, в то время как метод, основанный на jsonb_array_elements, не может быть проиндексирован.

...