Si necesita "combinar con mayúsculas y minúsculas", hay varias opciones, según sus requisitos exactos.
Tal vez lo más simple, hacer que el índice de expresión no distinga entre mayúsculas y minúsculas.
Basándose en la función f_unaccent()
establecido en la respuesta a la que se hace referencia:
- ¿PostgreSQL admite intercalaciones "insensibles a los acentos"?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));
Entonces:
SELECT *
FROM users
WHERE lower(f_unaccent(name)) = lower(f_unaccent('João'));
O podrías construir el lower()
en la función f_unaccent()
, para derivar algo como f_lower_unaccent()
.
O (especialmente si necesita hacer coincidencias de patrones difusos de todos modos) puede usar un índice de trigrama proporcionado por el módulo adicional pg_trgm basándose en la función anterior, que también es compatible con ILIKE
. Detalles:
- MENU LIKE vs iLIKE
Agregué una nota a la respuesta a la que se hace referencia.
O podría usar el módulo adicional citext :
- Restricción única diferible que no distingue entre mayúsculas y minúsculas