tutorial sirve que para instalar como postgresql

sirve - postgresql version



PostgreSQL: Cómo hacer una consulta "sin distinción de mayúsculas y minúsculas" (7)

¿Hay alguna forma de escribir consultas que no distingan entre mayúsculas y minúsculas en PostgreSQL? Por ejemplo, quiero que las siguientes 3 consultas devuelvan el mismo resultado.

SELECT id FROM groups where name=''administrator'' SELECT id FROM groups where name=''ADMINISTRATOR'' SELECT id FROM groups where name=''Administrator''


El enfoque más común es minúsculas o mayúsculas en la cadena de búsqueda y los datos. Pero hay dos problemas con eso.

  1. Funciona en inglés, pero no en todos los idiomas. (Tal vez ni siquiera en la mayoría de los idiomas). No todas las letras minúsculas tienen una letra mayúscula correspondiente; no todas las letras mayúsculas tienen una letra minúscula correspondiente.
  2. El uso de funciones como lower () y upper () le dará una exploración secuencial. No puede usar índices. En mi sistema de prueba, usar lower () lleva aproximadamente 2000 veces más que una consulta que puede usar un índice. (Los datos de prueba tienen un poco más de 100k filas).

Hay al menos tres soluciones de uso menos frecuente que podrían ser más efectivas.

  1. Utilice el módulo citext , que en su mayoría imita el comportamiento de un tipo de datos que no distingue entre mayúsculas y minúsculas. Habiendo cargado ese módulo, puede crear un índice que no CREATE INDEX ON groups (name::citext); mayúsculas de minúsculas por los CREATE INDEX ON groups (name::citext); . (Pero ver más abajo).
  2. Use una colación insensible a mayúsculas y minúsculas Esto se establece cuando se inicializa una base de datos. El uso de una intercalación que no distingue entre mayúsculas y minúsculas significa que puede aceptar casi cualquier formato del código del cliente, y aún así obtendrá resultados útiles. (También significa que no puede hacer consultas que distingan entre mayúsculas y minúsculas. Duh.)
  3. Crear un índice funcional. Cree un índice en minúsculas utilizando los CREATE INDEX ON groups (LOWER(name)); . Una vez hecho esto, puede aprovechar el índice con consultas como SELECT id FROM groups WHERE LOWER(name) = LOWER(''ADMINISTRATOR''); , o SELECT id FROM groups WHERE LOWER(name) = ''administrator''; Sin embargo, debes recordar usar LOWER ().

El módulo citext no proporciona un tipo de datos verdaderamente insensible a mayúsculas y minúsculas. En su lugar, se comporta como si cada cadena estuviera en minúsculas. Es decir, se comporta como si hubiera llamado a lower() en cada cadena, como en el número 3 anterior. La ventaja es que los programadores no tienen que recordar las cadenas en minúsculas. Pero debe leer las secciones "Comportamiento de comparación de cadenas" y "Limitaciones" en los documentos antes de decidir usar citext.


El uso de ~* puede mejorar mucho el rendimiento, con la funcionalidad de INSTR.

SELECT id FROM groups WHERE name ~* ''adm''

devuelve filas con el nombre que contiene O es igual a ''adm''.


Puedes usar ILIKE . es decir

SELECT id FROM groups where name ILIKE ''administrator''



También puedes usar expresiones regulares POSIX, como

SELECT id FROM groups where name ~* ''administrator''

SELECT ''asd'' ~* ''AsD'' devuelve t


Use la función LOWER para convertir las cadenas en minúsculas antes de comparar.

Prueba esto:

SELECT id FROM groups WHERE LOWER(name)=LOWER(''Administrator'')


usando ILIKE lugar de LIKE

SELECT id FROM groups WHERE name ILIKE ''Administrator''