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

PostgreSQL acento + búsqueda insensible a mayúsculas y minúsculas

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