Проверьте, присутствует ли какой-либо из данного массива значений в массиве 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);
Другие вопросы по тегам