Ich habe eine Postgres-Array-Spalte mit einem Gin Index:Wie fragt man ein postgres-Array mit dem GIN-Index ab?
CREATE TABLE things (
id integer NOT NULL,
tags character varying(255)[]
);
CREATE INDEX index_things_on_tags ON things USING gin (tags);
Es gibt ein paar Möglichkeiten, auf das Vorhandensein eines Elements in der Spalte mit verschiedenem Array-Betreiber zu überprüfen. Hier sind die, die ich gesehen habe:
select * from things where 'blue' = ANY (tags)
select * from things where tags <@ '{"blue"}'
select * from things where '{"blue","yellow"}' && tags;
In Postgres 9.3:
- Wird der erste den Gin Index verwenden?
- Ich bin mir ziemlich sicher, dass der zweite den Index verwenden wird. Es unterscheidet sich jedoch von der ersten. es erlaubt mir nicht zu überprüfen, ob Blau eines der Tags ist, ich muss das genaue Array angeben. Gibt es eine Möglichkeit, den Stil der Syntax in 2 zu erreichen, was 1 erreicht?
- In der dritten möchte ich jede Zeile, die eine von blau oder gelb hat. Wird diese Abfrage den GIN-Index verwenden? Wenn nicht, wie kann ich diese Abfrage mit einem Index machen?
Führen Sie einfach 'erklären analysieren' und alle Ihre Fragen werden beantwortet –