Wie man eine Auswahl mit Array trifft, enthält eine Wertklausel in psql

96

Ich habe eine Spalte arr vom Typ array.

Ich brauche Zeilen, in denen die arrSpalte einen Wert enthälts

Diese Abfrage:

SELECT * FROM table WHERE arr @> ARRAY['s']

gibt den Fehler:

FEHLER: Operator existiert nicht: Zeichen variierend [] @> Text []

Warum funktioniert es nicht?

ps Ich weiß über any()Operator Bescheid , aber warum funktioniert das nicht @>?

Oto Shavadze
quelle

Antworten:

65

Beachten Sie, dass dies auch funktionieren kann:

SELECT * FROM table WHERE s=ANY(array)
AetherUnbound
quelle
4
Und das verhindert auch, dass ich wie in s @> ARRAY['constant'::varchar]kürzer nach varchar werfen muss .
Andrew Backer
Dies wird den GIN-Index nicht verwenden, also würde ich ihn verwenden. Korrigieren Sie mich, wenn ich falsch
liege
17
SELECT * FROM table WHERE arr && '{s}'::text[];

Vergleichen Sie zwei Arrays für die Eindämmung.

vol7ron
quelle