Cosas de Linux
Inicio Info

Búsquedas en Postgresql ignorando acentos

  1. Solución 1. Crear una función que intercambie las vocales acentuadas por su homólogas sin acento.

    CREATE OR REPLACE FUNCTION sp_ascii(character varying)
    RETURN text AS $BODY$
    SELECT TRANSLATE
    ($1,
    'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ',
    'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
    $BODY$
    LANGUAGE 'sql';
  2. Solucción 2. Usar la extensión unaccent que viene dentro del paquete postgresql-contrib

    - Instalamos el paquete contrib.

    # apt install postgresql-contrib

    - Como root nos cambiamos al usuario postgres, nos situamos en la base de datos donde queremos instalar la extensión y la instalamos.

    # su - postgres
    postgres@envy:~$ psql basededatos
    psql (9.1.13, servidor 9.1.14)
    Digite help para obtener ayuda.
    basededatos=# CREATE EXTENSION unaccent;

    La extensión unaccent instalará en la base de datos indicada, un diccionario, una plantilla y cuatro funciones.

    Un uso habitual de la función unaccent es el siguiente:

    SELECT * FROM articulos
    WHERE unaccent(descripción) ILIKE unaccent('%sillon%')

    Esta consulta buscará en la tabla articulos todos los registros donde el campo descripcion contenga la palabra sillon, ignorando los acentos. Como además usamos ILIKE, la consulta ignorará también mayúsculas y minúsculas. Al utiizar los comodines %, la consulta buscará la cadena sillon en cualquier parte del campo.

2025 Alberto Picado