Проверьте, присутствует ли какой-либо из данного массива значений в массиве Postgres
Я пишу приложение на Rails 4 и в одной из моих моделей есть столбец строкового массива identifiers
, Когда пользователь передает список идентификаторов, каков синтаксис для выборки строк, где любой из заданных идентификаторов соответствует любому из сохраненных идентификаторов?
я пытаюсь where('ARRAY[?] == any(identifiers)', ids)
, но это не похоже на работу.
1 ответ
Решение
Используйте оператор массива "overlap": &&
SELECT * FROM tbl WHERE ARRAY[1,2,3] && identifiers
Или же:
SELECT * FROM tbl WHERE '{1,2,3}'::int[] && identifiers
Вы не раскрыли точный тип, который должен совпадать, конечно. Мой пример для целочисленных массивов.
Эта форма может использовать индекс GIN для столбца идентификаторов:
CREATE INDEX tbl_identifiers_gin_idx ON tbl USING GIN (identifiers);