Et alternativ, der ikke er nævnt, er at installere citext
udvidelse
der kommer med PostgreSQL 8.4+ og brug en række citext
:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Hvis du vil være strengt korrekt omkring dette og undgå udvidelser, skal du lave nogle temmelig grimme underforespørgsler fordi Pg ikke har mange rich array operationer, især ingen funktionelle mapping operationer. Noget som:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... hvor $1 er array-parameteren. I dit tilfælde tror jeg, du kan snyde lidt, fordi du er ligeglad med at bevare arrayets rækkefølge, så du kan gøre noget som:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);