[AYUDA] Queries de caracteres acentuados en Postgres

Gustavo Guillermo Perez gustavo en compunauta.com
Lun Abr 4 16:42:15 CDT 2011


El Lunes 04 Abril 2011, escribió:
> Que tal Gustavo,
> 
> Nuestro problema es que usamos realmente muchos constraints en las tablas,
> y MySQL simplemente se arrana cual vaca en medio de la carretera con estas
> características.
> 
> Por ejemplo, acabo de implementar la función:
> 
> CREATE OR REPLACE FUNCTION sp_ascii(character varying)
> RETURNS text AS
> $BODY$
> SELECT TRANSLATE
> ($1,
> 'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ',
> 'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
> $BODY$
> LANGUAGE 'sql' IMMUTABLE;
> 
> La cual sustituye todo caracter acentuado, tanto en la cadena de búsquda
> como en el campo en el cual se realiza la misma. Posteriormente, creando
> el índice (que termina en más de 10 minutos porque la tabla tiene casi 12
> millones de registros):
> 
> CREATE INDEX ksp_ascii_lastname ON clients (lower(sp_ascii(lastname)));
> 
> Para aventarle el query:
> 
> SELECT * FROM clients WHERE lower(sp_ascii(lastname)) LIKE
> lower(sp_ascii('pérez'));
> 
> Que me responde (en casi dos minutos):
> 
> '47168 rows found'
> 
> .... Esto no suena a una respuesta profesional aceptable. Pero tengo la
> esperanza de poder hacer un tuning a Postgres.
> 
> Algun tip al respecto?. Saludos.-
Claro que sí, es opensource, puedes modificar el código fuente en C para que 
te transforme las comparaciones, por una función tuya que sustituya la de 
simplemente ==, eso te daría muchísima velocidad y podrías ponerlo como una 
opción en postgresql a la hora de construirlo y hacer público el parche.!!! 
esa es la idea de que postgresql y mysql son opensource, que puedes 
modificarlos.!!!!

Respecto a los constraints, MySQL tiene varios drivers internos de 
almacenamiento y no todos lo soportan es cierto eso no quiere decir que no 
tenga soporte, al crear las tablas uno elije que tipo de storage, sabiendo 
pro/cons puedes elegir entre velocidad/journaling/constraints etc.

para hacer esto te recomendaría buscar una biblioteca común de utf8 para que 
conviertas las cadenas a utf8, luego las pases a minúsculas a ambas y por 
último antes de hacer la comparación, reemplazar íÍïÏì por i antes de ejecutar 
==.
También deberías modificar las funciones que actualizan y modifican el índice 
para indexar las versiones minúsculas y con los caracteres convertidos, siendo 
que no vas a alterar el registro original, solo la versión del char con el que 
indexas y comparas.

Saludos.
> > From: gustavo en compunauta.com
> > To: ayuda-linux en googlegroups.com
> > Subject: Re: [AYUDA] Queries de caracteres acentuados en Postgres
> > Date: Mon, 4 Apr 2011 15:50:42 -0500
> > 
> > El Lunes 04 Abril 2011, escribió:
> > > Que tal estimadísimos,
> > > 
> > > Mi duda con Postgres 8.4, es cómo diablos puedo ejecutar un select,
> > > donde un campo (p.e: nombre) conincida con 'maría' y me arroje los
> > > resultados:
> > > 
> > > MARIA
> > > MARÍA
> > > maria
> > > maría
> > 
> > tal vez con SIMILAR TO.
> > 
> > > Alguien ya resolvió esto en postgres?
> > 
> > Te recomiendo que si tu proyecto es nuevo lo analices, alomejor no te
> > conviene utilizar postgresql sino MySQL, no estoy a favor de uno o del
> > otro, sino que mysql en tu caso encuentra con 'maria' todos tus casos
> > como los listaste.
> > 
> > Saludos.
> > 
> > > Saludos y gracias de antemano.


-- 
Gustavo Guillermo Perez
http://www.compunauta.com
http://www.compunauta.net
http://anuncios.compunauta.net

-- 
Has recibido este mensaje porque estás suscrito a Grupo "ayuda-linux"
de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a ayuda-linux en googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
ayuda-linux-unsubscribe en googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.es/group/ayuda-linux?hl=es. o http://www.compunauta.com/ayuda/



Más información sobre la lista de distribución Ayuda