У меня есть столбец массива postgres с индексом gin:
CREATE TABLE things (
id integer NOT NULL,
tags character varying(255)[]
);
CREATE INDEX index_things_on_tags ON things USING gin (tags);
Есть несколько способов проверить наличие элемента в столбце, используя различные операторы массива. Вот те, которые я видел:
-
select * from things where 'blue' = ANY (tags)
-
select * from things where tags <@ '{"blue"}'
-
select * from things where '{"blue","yellow"}' && tags;
В postgres 9.3:
- Будет ли первый использовать индекс gin?
- Я уверен, что второй будет использовать индекс. Однако он отличается от первого. это не позволяет мне проверить, является ли синим один из тегов, он требует указать точный массив. Есть ли способ сделать стиль синтаксиса в 2 достижением того, что 1 достигает?
- В третьем я хочу любую строку, имеющую синюю или желтую. Будет ли этот запрос использовать индекс gin? Если нет, как я могу сделать этот запрос с индексом?