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

Acento do PostgreSQL + pesquisa sem distinção entre maiúsculas e minúsculas


Se você precisar "combinar com maiúsculas e minúsculas", há várias opções, dependendo de seus requisitos exatos.

Talvez o mais simples, faça com que o índice de expressão não faça distinção entre maiúsculas e minúsculas.

Construindo na função f_unaccent() apresentado na resposta referenciada:
  • O PostgreSQL suporta agrupamentos "insensíveis ao acento"?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

Então:
SELECT *
FROM   users
WHERE  lower(f_unaccent(name)) = lower(f_unaccent('João'));

Ou você pode construir o lower() na função f_unaccent() , para derivar algo como f_lower_unaccent() .

Ou (especialmente se você precisar fazer correspondência de padrões difusos de qualquer maneira), você pode usar um índice de trigrama fornecido pelo módulo adicional pg_trgm com base na função acima, que também suporta ILIKE . Detalhes:
  • Curtir mais baixo vs iLIKE

Eu adicionei uma nota à resposta referenciada.

Ou você pode usar o módulo adicional citext :
  • Restrição exclusiva que não diferencia maiúsculas de minúsculas