Ho una tabellaSequenze non influenzate dalle transazioni?
create table testtable(
testtable_rid serial not null,
data integer not null,
constraint pk_testtable primary key(testtable_rid)
);
Allora supponiamo che faccio questo codice circa 20 volte:
begin;
insert into testtable (data) values (0);
rollback;
e poi fare
begin;
insert into testtable (data) values (0);
commit;
E infine una
select * from testtable
Result: row0: testtable_rid=21 | data=0 Expected result: row0: testtable_rid=1 | data=0
Come si può vedere, le sequenze non sembrano essere influenzate dai rollback delle transazioni. Continuano ad aumentare come se la transazione fosse stata commessa e quindi la riga è stata cancellata. C'è un modo per evitare che le sequenze si comportino in questo modo?
Se la seconda transazione viene eseguita, questa transazione deve ottenere la sequenza numero 1. Poiché la prima transazione è stata annullata, nessun numero di sequenza sarebbe stato preso per la prima transazione. Certo, PostgreSQL non ha implementato questo, né Oracle, ma non ci sono vincoli concettuali contro il sequenziamento transazionale, solo i vincoli nell'implementazione. – Hartmut