Una alternativa no mencionada es instalar el citext
extensión
que viene con PostgreSQL 8.4+ y usa una matriz de citext
:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Si quiere ser estrictamente correcto sobre esto y evitar extensiones, debe hacer algunas subconsultas bastante feas porque Pg no tiene muchas operaciones de matriz ricas, en particular, no tiene operaciones de mapeo funcional. Algo como:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... donde $1 es el parámetro de matriz. En su caso, creo que puede hacer un poco de trampa porque no le importa conservar el orden de la matriz, por lo que puede hacer algo como:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);