PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SELECT insensível a maiúsculas e minúsculas do PostgreSQL na matriz


Uma alternativa não mencionada é instalar o o citext extensão que vem com o PostgreSQL 8.4+ e usa um array de citext :
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
 ?column? 
----------
 t
(1 row)

Se você quiser ser estritamente correto sobre isso e evitar extensões, precisará fazer algumas subconsultas muito feias porque o Pg não tem muitas operações de matriz ricas, em particular nenhuma operação de mapeamento funcional. Algo como:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;

... onde $1 é o parâmetro da matriz. No seu caso, acho que você pode trapacear um pouco porque não se importa em preservar a ordem do array, então você pode fazer algo como:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);