Tengo una tabla llamada contactos

 id |       name       
----+------------------
 44 | Aarón  

Estoy tratando de ejecutar una consulta:

select id,name from contacts where name ilike 'Aaro%';

Devuelve (0 rows)

Estoy intentando buscar ' o ' y también espero que el resultado incluya todo el acento de ' o ' como ' ó '. Como hice algunas búsquedas en Google y apilaron overlfowing, descubrí que usando la configuración regional necesito instalar la intercalación. Así que instalé la intercalación en Linux por

sudo locale-gen --no-archive de_DE.utf-8

Después de eso, intenté instalar la intercalación en la base de datos postgresql.

create collation de (LOCALE='de_DE.utf-8');

Colación generada con éxito. He intentado enumerar esta intercalación usando select * from pg_collation; y está ahí.

Después de hacer todo esto, intenté nuevamente obtener el resultado de todo el acento relativo 'o' por consulta:

select id,name from contacts where name ilike 'Aaro%';

Pero de nuevo tengo (0 rows)

En definitiva quiero el registro "Aarón" cuando ejecuto la consulta anterior.

Gracias por adelantado.

1
Hardikgiri Goswami 14 dic. 2016 a las 11:15

2 respuestas

La mejor respuesta

Puede usar el módulo noccent de postgres.

Para eso necesita instalar postgresql-contrib en su sistema. puede instalarlo usando el siguiente comando en Linux basado en Debian.

sudo apt-get install postgresql-contrib

Después de eso, puede crear unccent en postgres.

postgres_db=# create EXTENSION unaccent;
CREATE EXTENSION
postgres_db=# select name from test where unaccent(name) ilike 'Aaro%';
 name  
-------
 Aarón
(1 row)

¡Espero que esto ayude!

3
Atul Arvind 14 dic. 2016 a las 08:35

La extensión unaccent es una buena solución. Si trabaja con un pequeño conjunto de caracteres sin ligaduras, alternativamente puede usar una función simple como esta para polaco:

create or replace function unaccent_pl(text)
returns text language sql immutable as $$
    select translate($1, 'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ', 'acelnoszzACELNOSZZ')
$$;

select unaccent_pl('Zażółć gęślą jaźń');

    unaccent_pl    
-------------------
 Zazolc gesla jazn
(1 row) 
1
klin 14 dic. 2016 a las 08:59