Salah satu alternatif yang tidak disebutkan adalah menginstal citext
ekstensi
yang datang dengan PostgreSQL 8.4+ dan menggunakan larik citext
:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Jika Anda ingin benar tentang hal ini dan menghindari ekstensi, Anda harus melakukan beberapa subquery yang cukup jelek karena Pg tidak memiliki banyak operasi larik kaya, khususnya tidak ada operasi pemetaan fungsional. Sesuatu seperti:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... di mana $1 adalah parameter larik. Dalam kasus Anda, saya pikir Anda dapat sedikit curang karena Anda tidak peduli dengan menjaga urutan array, sehingga Anda dapat melakukan sesuatu seperti:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);