[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