PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL Groß-/Kleinschreibung nicht beachtendes SELECT auf Array

Eine nicht erwähnte Alternative ist die Installation von dem citext Erweiterung das kommt mit PostgreSQL 8.4+ und verwendet ein Array von citext :

regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
 ?column? 
----------
 t
(1 row)

Wenn Sie diesbezüglich absolut korrekt sein und Erweiterungen vermeiden möchten, müssen Sie einige ziemlich hässliche Unterabfragen weil Pg nicht viele umfangreiche Array-Operationen hat, insbesondere keine funktionalen Mapping-Operationen. Etwas wie:

SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;

... wobei $1 der Array-Parameter ist. In Ihrem Fall denke ich, dass Sie ein bisschen schummeln können, weil es Ihnen egal ist, die Reihenfolge des Arrays beizubehalten, also können Sie so etwas tun:

SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);