sql >> Base de Datos >  >> RDS >> PostgreSQL

SELECCIÓN de mayúsculas y minúsculas de PostgreSQL en matriz

Una alternativa no mencionada es instalar el citext extensión que viene con PostgreSQL 8.4+ y usa una matriz de citext :

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

Si quiere ser estrictamente correcto sobre esto y evitar extensiones, debe hacer algunas subconsultas bastante feas porque Pg no tiene muchas operaciones de matriz ricas, en particular, no tiene operaciones de mapeo funcional. Algo como:

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

... donde $1 es el parámetro de matriz. En su caso, creo que puede hacer un poco de trampa porque no le importa conservar el orden de la matriz, por lo que puede hacer algo como:

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