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 @>?

Antworten:



65

Beachten Sie, dass dies auch funktionieren kann:

SELECT * FROM table WHERE s=ANY(array)

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.