Một giải pháp thay thế không được đề cập là cài đặt citext
phần mở rộng
đi kèm với PostgreSQL 8.4+ và sử dụng một mảng citext
:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
Nếu bạn muốn hoàn toàn chính xác về điều này và tránh các tiện ích mở rộng, bạn phải thực hiện một số truy vấn con khá xấu bởi vì Pg không có nhiều hoạt động mảng phong phú, đặc biệt là không có hoạt động ánh xạ chức năng. Một cái gì đó như:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... trong đó $ 1 là tham số mảng. Trong trường hợp của bạn, tôi nghĩ bạn có thể gian lận một chút vì bạn không quan tâm đến việc bảo toàn thứ tự của mảng, vì vậy bạn có thể làm một số việc như:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);