Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Secuencia

Estas en el tema de Secuencia en el foro de PostgreSQL en Foros del Web. Hola tengo creada una secuencia en postgresql de esta forma -- Sequence: sequence1 -- DROP SEQUENCE equence1; CREATE SEQUENCE sequence1 INCREMENT 1 MINVALUE 0 MAXVALUE ...
  #1 (permalink)  
Antiguo 08/09/2008, 12:02
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Pregunta Secuencia

Hola tengo creada una secuencia en postgresql de esta forma
-- Sequence: sequence1

-- DROP SEQUENCE equence1;

CREATE SEQUENCE sequence1
INCREMENT 1
MINVALUE 0
MAXVALUE 9223372036854775807
START 0
CACHE 1
CYCLE;
ALTER TABLE sequence1 ;

El problema que me ha surgido es que cuando se crea la secuencia 1 y esta es eliminada, el siguiente valor de la secuencia ya es 2 aun cuando 1 ya no exista. Quisiera saber si hay alguna otra funcion o algo que restablesca nuevamente el valor de la secuencia es decir que si se ha eliminado la secuencia 1, la siguiente vuelva a ser nuevamente 1 y no 2.
Gracias saludos.
  #2 (permalink)  
Antiguo 09/09/2008, 03:55
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Secuencia

Mayte, te has liado porque lo que dices no es asi:

Código:
openbravo=# create SEQUENCE seq1;
CREATE SEQUENCE
openbravo=# select nextval('seq1');
 nextval
---------
       1
(1 fila)

openbravo=# select nextval('seq1');
 nextval
---------
       2
(1 fila)

openbravo=# select nextval('seq1');
 nextval
---------
       3
(1 fila)

openbravo=# drop SEQUENCE seq1;
DROP SEQUENCE
openbravo=# select nextval('seq1');
ERROR:  no existe la relación «seq1»
openbravo=# create SEQUENCE seq1;
CREATE SEQUENCE
openbravo=# select nextval('seq1');
 nextval
---------
       1
(1 fila)
Cuando borras la secuencia, si la vuelves a crear se inicia en el valor que le digas en START.
Salu2
  #3 (permalink)  
Antiguo 09/09/2008, 09:32
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencia

Bueno no me refiero a borrarla con drop SEQUENCE seq1,
si no a que la secuencia la tengo como numero consecutivo de una ventana.ç
Si inicio mi secuencia en 0, cuando cree en la ventana un nuevo registro el numero consecutivo es "1", y esto es correcto pero si por ejemplo yo cancelo este registro la secuencia ya no esta en 0 si no ya es 1 y el siguiente sera 2aun cuando en mi ventana no tenga ningun registro con el numero 1.
A eso me refiero por que tengo algo a esto:

INSERT INTO Tablita (idTablita,numero_consecutivo,name,description)
VALUES (10,(SELECT nextval('sequence1')),'TEXTONAME','TEXTODESCRIPTIO N');

Entonces me pasa con mucha frecuencia que cada que abro la ventana me da la opcion de crear un nuevo registro y por lo tanto el consecutivo ya lo esta poniendo en automatico por lo que si cancelo el crear el registro ese numero consecutivo se pierde y la proxima vez que quiero crear uno nuevo me salta al siguiente, entiendo que esto es correcto para las secuencias lo que quiero es alguna funcion o algo que restablesca nuevamente el valor inicial de la secuencia por ejemplo si se crearon del 1 al 10 registros en mi ventana y elimino el numero 10 cuando genere otro no me ponga el 11 si no me ponga nuevamente el 10, cuyo registro ya no existe aunque la secuencia se haya quedado con el ultimo valor de 10(SELECT last_value FROM sequence1) y mi siguiente valor ovbiamente es 11 por lo tanto es correcto que ponga 11, pero yo en este caso necesito que si elimine un registro la secuencia vuelva a obtener el ultimo y no el siguiente.
Espero haberme explicado un poco mas.
Saludos
  #4 (permalink)  
Antiguo 09/09/2008, 09:37
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Secuencia

Es el comportamiento correcto de una secuencia.
Si quieres puedes capturar el ultimo id y resetear la secuencia a dicho valor, pero no veo motivo ni utilidad a hacer algo asi.
Por y para que quieres esto?

Y si por ejemplo tienes del 1-10 y borras el 7.....
Salu2
  #5 (permalink)  
Antiguo 09/09/2008, 11:55
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencia

Lo necesito hacer por que mis facturas llevan un orden consecutivo y por ejemplo cuando se crea una nueva factura me da en automatico el el numero de secuencia que llevan mis facturas si la ultima que hice fue la 10, ovbiamente la nueva que estoy creando es la 11, pero si por alguna razon elimino dicha factura del sistema, la proxima vez que quiera hacer una factura me dara una secuencia de 12 y me gustaria que pusiera nuevamente la 11.
Y si como tu dices tengo del 1-10 y borro la 7, me gustaria que restableciera el valor consecutivo de las demas es de cir ala 8 la ponga como 7 y la nueve como 8 y la 10 por ultimo como 9, por que he eliminado la 7.
Bueno si no se puede hacer pues buscare otra forma.
Gracias seyko saludos.
  #6 (permalink)  
Antiguo 10/09/2008, 02:26
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Secuencia

Cada vez que elimines una factura anterior cambiar todos los codigos de las facturas siguientes es mala idea!
Puede utilizar una función propia para generar los codigos de las facturas en lugar de utilizar una sequencia.
Ahora mismo se me ocurre:

Código:
DECLARE 
maximo_codigo integer;
siguiente_codigo integer;
BEGIN
select max(n_factura) into maximo_codigo from tabla;

select min(numero) into siguiente_codigo from (
   select numero from generate_series(1, maximo_codigo)
   except
   select codigo_factura from tabla
) foo;

return  siguiente_codigo;
Es lo que se me ha venido a la cabeza de primeras, creo que esta bien.

Salu2

PD: Tengo pendiente mirar el tema de tu trigger pero ando un poco liado.
  #7 (permalink)  
Antiguo 10/09/2008, 10:11
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencia

Muchas gracias intentare hacer la funcion y en cuanto al trigger he podido hacer lo quw necesitaba ovbiamente se que esta demasiado grande y que quizas podria quedar mejor.
Te lo envio a tu correo para que puedas darme tus observaciones.
Saludos seyko.
  #8 (permalink)  
Antiguo 12/09/2008, 18:20
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Secuencia

Yo no hubiera hecho una función en postgres para generar el numero de la factura, si no mas bien en el lenguaje que éstes usando, es que siempre ando pensando en no cargar demasiado los procesos en el servidor.

P..D.T. Hubieras posteado tu solucion por aca para que todos pudieramos verla.
  #9 (permalink)  
Antiguo 01/10/2008, 15:53
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Secuencia

Sip me hubiera servido bastante por que tengo el mismo problema
  #10 (permalink)  
Antiguo 02/10/2008, 01:08
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Secuencia

dicaraso, porque no abres un hilo nuevo con los problemas que tienes en lugar de contestar en todos los hilos sobre secuencias?

Explica que necesitas con claridad y lo vemos.

Salu2
  #11 (permalink)  
Antiguo 02/10/2008, 11:20
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencia

Hola dicaraso no he logrado solucionar lo de la secuencia sigue igual lo que he hecho es restablecerla manualmente para que parta del valor que necesito, la solucion ala que me referia era ala de un trigger en el que seyko me estaba orientando.

Por lo que lamento no poder ayudar.

Hasta pronto.
  #12 (permalink)  
Antiguo 20/10/2008, 10:45
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Secuencia

Nop Gracias a Todos ya lo solucione
  #13 (permalink)  
Antiguo 22/10/2008, 15:30
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencia

Hola podrias decirnos cual fue tu solucion gracias.
saludos
  #14 (permalink)  
Antiguo 01/06/2010, 13:12
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Secuencia

Lo que hice jejeje despues de dos años, fue que hice una tabla sin llaves primarias, donde manejabalos concecutivos segun un concepto y hice un disparador para actualizarlo, cada vez que se hacia un insert en la tabla facturas si hacia el insert hacia un for update para bloquear el registro.. y pues funciona
  #15 (permalink)  
Antiguo 01/06/2010, 13:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 15
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Secuencia

Que pena no haber contestado jajaja, pero no volvi a ver estos foros, y ps despues del regaño ni modo.. Saludes
  #16 (permalink)  
Antiguo 11/06/2010, 18:06
 
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Secuencia

Hola, solo para recordarte que una tabla sin llave primaria no cumples con las formas normales de las bases de datos y por lo tanto no es un diseño correcto, yo en todo caso lo que hubiera hecho en tu lugar es crear un campo, una secuancia y hacerlo llave primaria y hacer otro campo que se llame folio (refiriendose al de la factura) y llenarlo a mano según la factura.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:45.