Как написать Postgres JSONB Где клаусуле - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующая таблица:

CREATE TABLE mbiz.dictionary_groups (
    slgr_id jsonb NOT NULL,
    stored jsonb NOT NULL,
    modified_date timestamp NOT NULL DEFAULT now(),
    CONSTRAINT dictionary_groups_pkey PRIMARY KEY (slgr_id)
);

и сохраняет json объект в столбце с именем «сохранено», пример:

{
    "Position": 
        {"RotationId": 0, "SubGroupId": 0, "DiscoutGroupId": 99, "PriceIntervalId": 0},
    "DefaultValue": 0.0, 
    "PositionValues": 
    [
        {"Value": 26.0, "ProfileId": 1}, 
        {"Value": 18.0, "ProfileId": 2}, 
        {"Value": 33.0, "ProfileId": 12}
    ]
}

Я пытаюсь найти все записи где любая запись в «PositionValues» будет иметь «ProfileId», равный 2.

Это Postgres 9.5, я нашел несколько советов, где пользователи предлагают использовать ? или @>, но когда я попробовал это , Я получил сообщение об ошибке:

"SQL Ошибка [42883]: ОШИБКА: оператор не существует: @> неизвестно
Подсказка: ни один оператор не соответствует данному имени и типу аргумента (s) Возможно, вам понадобится добавить явные приведения типов.
Позиция: 85 "

1 Ответ

3 голосов
/ 30 марта 2020

Вам необходимо указать массив справа:

select *
from dictionary_groups
where "stored" -> 'PositionValues' @> '[{"ProfileId": 2}]';

Онлайн пример

...