PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL insensible à la casse SELECT sur le tableau

Une alternative non mentionnée consiste à installer le citext extension qui vient avec PostgreSQL 8.4+ et utilise un tableau de citext :

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

Si vous voulez être strictement correct à ce sujet et éviter les extensions, vous devez faire quelques sous-requêtes plutôt laides car Pg n'a pas beaucoup d'opérations de tableau riches, en particulier aucune opération de mappage fonctionnelle. Quelque chose comme :

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

... où $1 est le paramètre de tableau. Dans votre cas, je pense que vous pouvez tricher un peu parce que vous ne vous souciez pas de préserver l'ordre du tableau, vous pouvez donc faire quelque chose comme :

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