[Pgsql-ayuda] Relacionado con este tema..... Era: Pgsql-ayuda] ¿Cómo se come esto?

Operaciones - Piensa Technologies operaciones@piensa.com
27 Nov 2002 11:59:40 -0600


Esto tiene relación con lo que está sucediendo, tal vez a alguien le
haya pasado lo mismo:

La versión de PostgreSQL en la que sucedió esto es la 7.1.2

La tabla tiene entre otras columnas (no es salida del pgsql los ejemplos
que siguen, los he inventado al escribir basado en lo que sucedió):

id | saldo
----------
1    500.45
2    194.29
3    983.17
etc.

AL realizar un:  SELECT saldo from tabla where saldo=983.17

Resulta que no hay resultado, pero si se hace:

SELECT saldo from tabla where saldo>983.17 and saldo<983.18

Regresa el registro con id 3.   Obviamente el valor de saldo es
algo así como 983.17999999.... lo hemos "probado" modificando el rango
del select anterior (saldo>=983.171 and saldo<983.175..y así
sucesivamente).

La pregunta fué, como se guardó en la BD un 983.17 y se "ve" de esa
manera cuando el valor real es un poco (muy poco) mayor que ese número.
Es decir, lo que se "ve" con el primer select  no es en realidad lo que
esta "guardado" en la BD?

Cabe mencionar que el saldo es un dato que se calcula en la aplicación y
se guarda posteriormente en la BD

A alguien le ha sucedido esto ? Comentarios en la lista son
bienvenidos.. Gracias

Eduardo.


On Wed, 2002-11-27 at 11:11, Cesar Villanueva wrote:
> 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 espacio (u 
> otro caracter invisible antes o después del número en sí. 
> 
> Algo como 
> 
> SELECT id, marca FROM empresas WHERE id LIKE '%2129%';
> 
> y producir algio como:
> 
>    id   | marca
>  -------+-------
> (...)
>   21291 | GOWAS
>   21292 | GOWAS
>   21293 | Muebles Celda
>   21294 |
> (..)
> 
> 
> Si es así entonces el problema está en la rutina que ingresa el número de id 
> (es raro si es una secuencia o SERIAL) pero si es introducida por el usuario 
> estonces debes validar que no se ingresen caracteres extraños...
> 
> ¿Cómo _corregir_  el registro? 
> 
> Prueba hacer un UPDATE de la siguiente forma:
> 
> UPDATE empresas set id='21293' where marca ='Muebles Celda';
> 
> (por tu llamada anterior estamos seguros que hay una sola instancia de 
> "Muebles Celda"; caso contrario debes usar el oid.
> 
> SELECT oid, marca FROM empresas WHERE marca = 'Muebles Celda';
>   oid   |     marca
> -------+---------------
> 55555 | Muebles Celda
> 
> y actualizas
> 
> UPDATE empresas set id='21293' where oid ='55555';
> 
> 
> El Miércoles 27 Noviembre 2002 12:20, Antonio Mármol Albert escribió:
> > SELECT id, marca FROM empresas WHERE id > '21290' AND id < '21295';
> >   id   | marca
> > -------+-------
> >  21291 | GOWAS
> >  21292 | GOWAS
> >  21294 |
> > (3 rows)
> >
> > Pero...
> >
> > SELECT id, marca FROM empresas WHERE marca = 'Muebles Celda';
> >   id   |     marca
> > -------+---------------
> >  21293 | Muebles Celda
> > (1 row)
> >
> > Al buscar por "id" no me sale ese registro. El campo "id" es la clave
> > primaria de la tabla.
> >
> > Ya me di cuenta de esto otra vez (fue de casualidad, un error que vi en una
> > pagina de php) y no le di importancia. Hoy es la segunda vez que veo esto.
> >
> > No han habido cortes de luz ni cierres bruscos de la base de datos. Por lo
> > que no deberia estar corrupta.
> >
> > Sin embargo...
> >
> > SELECT id, marca FROM empresas WHERE id='21292';
> >   id   | marca
> > -------+-------
> >  21292 | GOWAS
> > (1 row)
> >
> > Al parecer solo ocurre en X registros...
> >
> > ¿Puede ser un bug?