[Pgsql-ayuda] Re: [Pgsql-ayuda] ¿Cómo se come esto?

Luis Rodrigo Gallardo Cruz lgallardo@computacion.cs.cinvestav.mx
27 Nov 2002 15:32:32 -0600


El mié, 27-11-2002 a las 11:42, Antonio Mármol Albert escribió:
> El miércoles 27 de noviembre de 2002  (13:11), Cesar Villanueva escribi=
ó:
> 
> > Hola *
> > 
> > A mí lo que me parece es que el id de 'Muebles Celda' _no_ es 
> > '21293'; quizá es '21293 ' o bien ' 21293'. Es decir, que hay un espa=
cio (u 
> > otro caracter invisible antes o después del número en sí. 

Respondo esto despues de que ya dieron la solución (el índice estaba
corrupto), pero hay cosas a aclarar aún.

No, no podía ser esto. En el esquema de la base dice que id es un int,
por lo tanto no pueden haber cosas como espacios extras. No es unca
cadena.

> habitat=# SELECT id, marca FROM empresas WHERE id LIKE '%2129%';
>   id   |     marca
> -------+----------------
>   2129 |
>  12129 |
>  21293 | Muebles Celda
>  21295 |
>  21294 |
>  21297 | mueble moderno
>  21298 |
>  22129 |
>  21291 | GOWAS
>  21292 | GOWAS
>  21299 | CONSTRUCTIVA
> (11 rows)
> 
> 
> Así, SÍ que sale. ¿Por qué así sí? No lo entiendo... id es un=
 campo entero
> (tipo SERIAL). Puedo arreglar ese registro, pero... ¿cuántos registro=
s
> tendré igual que es? Puede ser un problema. :/

Cuando haces el ... id LIKE '%2129%' estas pidiendo comparar un int con
una cadena. Postgres convierte el entero a cadena para hacer la
comparación. Y como ya no está trabajando con una comparación de
igualdad sobre el entero único, ya no usa el índice, sino que se va
directo a la tabla y le salen todos los datos bien.

 
-- 
Rodrigo
PGP key 1024D/ADC9BC28 2002-02-26 [expires 2004-02-26]
Fingerprint: 7C81 E60C 442E 8FBC D975  2F49 0199 8318 ADC9 BC28