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