Discussion:
Auto incrementar con Serial
Jorge Castellanos
2012-08-06 22:01:45 UTC
Permalink
Amigos de esta grandiosa DB relacional Postgresql, quisiera solicitar su
apoyo para lo siguiente.

Resulta ser que estoy programando con JAVA&Hibernate y cuando se genera
un error de transacción por que un campo index unique se inserta un dato
existente, mi campo en la tabla tipo Serial para pk incrementa su valor
y quiero que no se incremente cuando un error por transacción ocurra,
solo hasta que la transacción sea exitosa.

Como puedo hacer esto ?

Espero sus amables respuestas.
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda-RDL/qDirzP6MkH2+***@public.gmane.orgg)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Jorge Castellanos
2012-08-06 23:02:30 UTC
Permalink
Muchas gracias por tu respuesta y ayuda.

Tendrás alguna sugerencia para dar una mejor solución a mi problema y no
inventarme el hilo negro.
Hola Jorge,
Si necesitas controlar el correlativo debes usar una tabla de
correlativos u otro mecanismo ya que los seriales usan SECUENCIAS y
estas secuencias no soportan transacciones vale decir una vez
aumentado el valor este no regresa a su estado anterior con un rollback.
Saludos y éxitos.
Javier.
Post by Jorge Castellanos
Amigos de esta grandiosa DB relacional Postgresql, quisiera solicitar su
apoyo para lo siguiente.
Resulta ser que estoy programando con JAVA&Hibernate y cuando se genera
un error de transacción por que un campo index unique se inserta un dato
existente, mi campo en la tabla tipo Serial para pk incrementa su valor
y quiero que no se incremente cuando un error por transacción ocurra,
solo hasta que la transacción sea exitosa.
Como puedo hacer esto ?
Espero sus amables respuestas.
-
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Jaime Casanova
2012-08-06 23:16:33 UTC
Permalink
Post by Jorge Castellanos
Muchas gracias por tu respuesta y ayuda.
Tendrás alguna sugerencia para dar una mejor solución a mi problema y no
inventarme el hilo negro.
una vez incrementada una secuencia esta no regresa, eso es porque las
secuencias viven fuera de las transacciones.
es asi porque es la unica forma de permitir alta concurrencia, de lo
contrario la secuencia va a ser un cuello de botella porque nadie
podra tomar un numero de una secuencia hasta que las demas
transacciones que la esten usando hayan hecho COMMIT o ROLLBACK (de
otro modo como saber si la transaccion uso el numero o no).

la solucion es la que te indicaron, la otra opcion es bloquear la
tabla en que estas escribiendo para evitar que alguien mas tome un
numero
--
Jaime Casanova www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda-RDL/***@public.gmane.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
Alejandra Bautista
2012-08-07 00:44:45 UTC
Permalink
Por programación si no hay nungún error en la transacción puedes pedir el
siguiente numero serial de la secuencia e insertarlo, necesitarias quitar
el default a la tabla que manda a llamar a la secuencia.
Post by Jorge Castellanos
Amigos de esta grandiosa DB relacional Postgresql, quisiera solicitar su
apoyo para lo siguiente.
Resulta ser que estoy programando con JAVA&Hibernate y cuando se genera un
error de transacción por que un campo index unique se inserta un dato
existente, mi campo en la tabla tipo Serial para pk incrementa su valor y
quiero que no se incremente cuando un error por transacción ocurra, solo
hasta que la transacción sea exitosa.
Como puedo hacer esto ?
Espero sus amables respuestas.
-
**)
http://www.postgresql.org/**mailpref/pgsql-es-ayuda<http://www.postgresql.org/mailpref/pgsql-es-ayuda>
Edwin Quijada
2012-08-09 02:40:42 UTC
Permalink
Define una tabla con un tipo y una secuecnia cada secuencia que necesites tendra un tipo y tendras que hacer un update a dicha tabla cada vez que genere una secuencia. Si hay un rollback este vuelve atras porque esta dentro de la transaccion. Al hacer el updta de la tabla tienes que bloquearla o hacer un select...for...update para bloquear la tupla.

From: alejandrabaut-***@public.gmane.org
Date: Mon, 6 Aug 2012 19:44:45 -0500
Subject: Re: [pgsql-es-ayuda] Auto incrementar con Serial
To: tuxmen84-***@public.gmane.org
CC: pgsql-es-ayuda-RDL/***@public.gmane.org

Por programación si no hay nungún error en la transacción puedes pedir el siguiente numero serial de la secuencia e insertarlo, necesitarias quitar el default a la tabla que manda a llamar a la secuencia.





El 6 de agosto de 2012 17:01, Jorge Castellanos <tuxmen84-***@public.gmane.org> escribió:


Amigos de esta grandiosa DB relacional Postgresql, quisiera solicitar su apoyo para lo siguiente.



Resulta ser que estoy programando con JAVA&Hibernate y cuando se genera un error de transacción por que un campo index unique se inserta un dato existente, mi campo en la tabla tipo Serial para pk incrementa su valor y quiero que no se incremente cuando un error por transacción ocurra, solo hasta que la transacción sea exitosa.





Como puedo hacer esto ?



Espero sus amables respuestas.

-

Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda-RDL/***@public.gmane.org)

Para cambiar tu suscripción:

http://www.postgresql.org/mailpref/pgsql-es-ayuda

Continúe leyendo en narkive:
Loading...