tabla postgres lock examples desbloquear postgresql transactions rollback database-sequence

postgresql - postgres - ¿Secuencias no afectadas por las transacciones?



subquery postgresql examples (2)

Tengo una mesa

create table testtable( testtable_rid serial not null, data integer not null, constraint pk_testtable primary key(testtable_rid) );

Así que digamos que hago este código unas 20 veces:

begin; insert into testtable (data) values (0); rollback;

y luego hago

begin; insert into testtable (data) values (0); commit;

Y finalmente un

select * from testtable

Result: row0: testtable_rid=21 | data=0 Expected result: row0: testtable_rid=1 | data=0

Como puede ver, las secuencias no parecen verse afectadas por las reversiones de transacciones. Continúan incrementándose como si la transacción se hubiera confirmado y luego se eliminó la fila. ¿Hay alguna manera de evitar que las secuencias se comporten de esta manera?


No sería una buena idea deshacer las secuencias. Imagine dos transacciones que ocurren al mismo tiempo, cada una de las cuales usa la secuencia para una identificación única. Si la segunda transacción se confirma y la primera se revierte, la segunda inserta una fila con "2", mientras que la primera devuelve la secuencia a "1".

Si esa secuencia se usa nuevamente, el valor de la secuencia se convertirá en "2", lo que podría llevar a un problema de restricción único.


No, no hay. Vea la nota al final de esta página . Es una mala idea hacer algo así de todos modos. Si tiene dos transacciones ejecutándose al mismo tiempo, cada una insertando una fila, desea que inserten filas con diferentes ID.