У меня есть столбец jsonb, который содержит словарь, ключ которого указывает на массив строковых значений. Мне нужно запросить этот массив.
Таблица (называемая «вещами») выглядит следующим образом:
------------------
| my_column |
|----------------|
| { "a": ["X"] } |
------------------
Мне нужно написать два запроса:
Содержит ли массив значение "X"?
Не содержит ли массив значение "X"?
my_column
имеет ненулевое ограничение, но может содержать пустой словарь. Словарь может также содержать другие пары ключ / значение.
Первый запрос был прост:
SELECT * FROM things
WHERE my_column -> 'a' ? 'X';`
Второй оказывается более сложным. Я начал там с:
SELECT * FROM things
WHERE NOT my_column -> 'a' ? 'X';
... но это исключало все записи, в которых были словари, в которых не было ключа 'a'
Поэтому я изменил это так:
SELECT * FROM things
WHERE my_column -> 'a' IS NULL OR NOT
my_column -> 'a' ? 'X';
Это работает , но есть ли лучший способ? Кроме того, возможно ли проиндексировать этот запрос, и если да, то как?