179 votes

Postgres PAS dans le tableau

J'utilise le type de tableau natif de Postgres, et j'essaie de trouver les enregistrements où l'ID n'est pas dans le tableau des ID destinataires.

Je peux trouver où ils se trouvent :

SELECT COUNT(*) FROM messages WHERE (3 = ANY (recipient_ids))

Mais ça ne marche pas :

SELECT COUNT(*) FROM messages WHERE (3 != ANY (recipient_ids))
SELECT COUNT(*) FROM messages WHERE (3  = NOT ANY (recipient_ids))

Quelle est la bonne façon de tester cette maladie ?

14voto

Markus Mikkolainen Points 2228

not (3 = any(recipient_ids)) ?

3voto

jamming james Points 21

Notez que les opérateurs ANY/ALL ne fonctionnent pas avec les index des tableaux. Si les index sont en tête :

SELECT COUNT(*) FROM "messages" WHERE 3 && recipient_ids

et le négatif :

SELECT COUNT(*) FROM "messages" WHERE NOT (3 && recipient_ids)

Un index peut alors être créé comme suit :

CREATE INDEX recipient_ids_idx on tableName USING GIN(recipient_ids)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X