Tengo una tablaSecuencias no afectadas por las transacciones?
create table testtable(
testtable_rid serial not null,
data integer not null,
constraint pk_testtable primary key(testtable_rid)
);
lo que permite decir que hago este código alrededor de 20 veces:
begin;
insert into testtable (data) values (0);
rollback;
y luego hacer
begin;
insert into testtable (data) values (0);
commit;
Y por último, una
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 comprometido y luego se borró la fila. ¿Hay alguna manera de evitar que las secuencias se comporten de esta manera?
Si la segunda transacción se compromete, esta transacción debe obtener la secuencia número 1. Dado que la primera transacción se retrotrajo, no se habría tomado un número de secuencia para la primera transacción. Claro, PostgreSQL no implementó eso, ni Oracle, pero no hay restricciones conceptuales contra la secuenciación transaccional, solo restricciones en la implementación. – Hartmut