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

Antonio Mármol Albert toni@infurma.combios.es
Wed, 27 Nov 2002 18:42:56 +0100


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 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 |
> (..)

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 registros
tendré igual que es? Puede ser un problema. :/

El número de id se obtiene de una secuencia. En ningún momento se introduce
manualmente.

Gracias a todos por la atención prestada.

Y ahora otra... ¿cómo prevenir eso? :)

> 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?

-- 
Antonio Mármol Albert ( toni@infurma.es )
http://www.infurma.es