create or replace function sinacentos (text) returns text AS $$
select translate($1,'áéíóúÁÉÍÓÚäëïöüÄËÏÖÜ','aeiouAEIOUaeiouAEIOU');
$$ language sql;
Un ejemplo con esta funcion quedaria de la siguiente manera:
Primero un simple select de una tabla demo con palabras con acentos:
sicodelico=# select id, otro from foobar;
id | otro ----+--------
1 | algo
2 | algo
3 | algo
4 | algo
2 | algo
5 | México
6 | México
7 | Niño
1 | Mexico
(9 filas)
Ahora la misma consulta procesada con nuestra funcion:
sicodelico=# select id, sinacentos(otro) as otro from foobar;
id | otro
----+------------
1 | algo
2 | algo
3 | algo
4 | algo
2 | algo
5 | Mexico
6 | Mexico
7 | Niño
1 | Mexico
(9 filas)
Ahora una busqueda con el conteo total de las palabras que concuerden con México, MËXICO, MÉXICO, etc...
sicodelico=# select count(*) from foobar where upper(sinacentos(otro)) = upper(sinacentos('méxico'));
count
-------
3
(1 fila)
Con la consulta anterior ya tenemos una forma de buscar entre nuestros registros sin preocuparnos por las palabras que significan lo mismo pero aveces estan escritas sin acento o en mayusculas o minusculas.
--
Saludos.