Re: Reposicionamiento de elementos

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Manuel Saelices <msaelices(at)yacoi(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Reposicionamiento de elementos
Date: 2004-06-04 15:22:39
Message-ID: 20040604152239.GA12808@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Fri, Jun 04, 2004 at 11:07:05AM +0200, Manuel Saelices wrote:

Hola,

> me preguntaba si existe algun mecanismo en postgresql para mantener
> ordenados elementos de una tabla pero sin posiciones desocupadas.
>
> Es decir, no vale una secuencia, ya q en 1,2,3,4 si borramos el elemento
> 3 quedaria 1,2,4. Y lo q interesaría es que se reindexaran a 1,2,3.

En ese caso tendrias que usar un reindexamiento cada vez que hicieras
UPDATE, DELETE o INSERT. Puedes construir una funcion que haga el
reindexamiento, y la llamas con un trigger desde cualquiera de esas
operaciones. Supongo que necesitaras un LOCK TABLE para asegurarte que
funcione correctamente (si no, eliminar una pagina por aqui y agregar
una pagina por alla simultaneamente puede dejar cualquier cosa en la
tabla)

Ojo con una cosa: yo haria que ese numero no fuera la llave primaria.
Te sugiero que uses una secuencia comun y corriente para la llave
primaria, y tengas un campo separado para el ordenamiento. Esto, porque
cambiar la llave primaria puede tener implicancias muy desagradables (se
puede pero es molesto).

Ojo tambien con que el trigger puede dispararse a partir de los cambios
que hiciste en el trigger ... si de repente notas que "se queda pegado"
ya sabes a que puede deberse.

> ¿Alguien conoce algun mecanismo que no sea programarlo todo mediante
> procedimientos almacenados o desde la aplicación ?

Yo al menos no conozco nada que se le parezca. Creo que tendras que
escribir el (los?) procedimiento almacenado :-(

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Hay dos momentos en la vida de un hombre en los que no debería
especular: cuando puede permitírselo y cuando no puede" (Mark Twain)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mauricio Ferrari 2004-06-04 16:42:36 pg_dump pg_dumpall pg_restore
Previous Message Sebastián Villalba 2004-06-04 14:23:59 Re: consulta bytea