Een alternatief dat niet wordt genoemd, is het installeren van de citext
extensie
die bij PostgreSQL 8.4+ wordt geleverd en een array van citext
. gebruiken :
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Als je hier strikt correct over wilt zijn en extensies wilt vermijden, moet je een aantal vrij lelijke subquery's omdat Pg niet veel rich array-bewerkingen heeft, met name geen functionele mapping-bewerkingen. Iets als:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... waarbij $1 de arrayparameter is. In jouw geval denk ik dat je een beetje vals kunt spelen omdat het je niet uitmaakt om de volgorde van de array te behouden, dus je kunt zoiets doen als:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);