El campo 'apellidos' no es 'varchar' sino 'char(80)'

Realizando el índice de la forma:

CREATE INDEX envios_idx01 ON envios USING btree(apellidos varchar_pattern_ops);

me da el siguiente error:

ERROR:  la clase de operadores "varchar_pattern_ops" no acepta el tipo de datos character

pero en cambio he utilizado el índice:

CREATE INDEX envios_idx01 ON envios USING btree(apellidos bpchar_pattern_ops);

¡¡¡Y FUNCIONA PERFECTAMENTE!!!


Muchísimas gracias a todos por vuestra ayuda...


-------- Mensaje original --------
Asunto: Re: [pgsql-es-ayuda] Consulta, a priori, sencilla
Fecha: Mon, 29 Dec 2008 11:14:09 -0500
De: Raul Andres Duque <ra_duque@yahoo.com.mx>
Para: "I.N.T. - Programación" <dpto.programacion@grupo-int.com>
Referencias: <4958E9D3.4000903@grupo-int.com>


----- Original Message ----- 
From: ""I.N.T. - Programación"" <dpto.programacion@grupo-int.com>
To: <pgsql-es-ayuda@postgresql.org>
Sent: Monday, December 29, 2008 10:16 AM
Subject: [pgsql-es-ayuda] Consulta, a priori, sencilla


> Buenas,
>
> Tengo una BBDD con una tabla llamada 'envios' de 1.677.229 registros
>
> La consulta es:
>
> SELECT * FROM envios WHERE apellidos LIKE 'LOQUESEA%'
>
> y está creado el índice:
>
> CREATE INDEX envios_idx01 ON envios USING btree(apellidos);
>
> La consulta tarda casi 50seg. en ejecutarse y es un tiempo inadmisible. 
> Está claro que no utiliza el índice ¿porqué?
>

recuerda que si tu locale es diferente a 'C', debes los indices con 
varchar_pattern_ops. En este link encuentras la info correspondiente:
http://www.postgresql.org/docs/8.3/static/indexes-opclass.html



Atentamente,



RAUL DUQUE


> He realizado VACUUM FULL ANALYZE varias veces, regenerado el índice y nada
>
> ¿Alguna sugerencia?
>
> Gracias de antemano --
> TIP 4: No hagas 'kill -9' a postmaster