Jedną z niewymienionych alternatyw jest zainstalowanie citext
rozszerzenie
który jest dostarczany z PostgreSQL 8.4+ i używa tablicy citext
:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Jeśli chcesz mieć rację i unikać rozszerzeń, musisz wykonać kilka dość brzydkie podzapytania ponieważ Pg nie ma wielu bogatych operacji tablicowych, w szczególności nie ma operacji mapowania funkcjonalnego. Coś takiego:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... gdzie $1 jest parametrem tablicy. W twoim przypadku myślę, że możesz trochę oszukiwać, ponieważ nie zależy ci na zachowaniu kolejności tablicy, więc możesz zrobić coś takiego:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);