Für Sequences gelten einige Sichtbarkeitsregeln, die manchmal recht nützlich sein können. Oft werden Sequenzen verwendet, um Datensätzen eine eindeutige Nummer zu geben. In einem solchen Fall kann man sich zunutze machen, dass currval immer den aktuellen Wert einer Sequenz innerhalb der aktuellen Session liefert. Das sieht in der Praxis so aus:
test=# SELECT currval('seq_buch');
currval
---------
4
(1 row)
test=# SELECT nextval('seq_buch');
nextval
---------
5
(1 row)
test=# SELECT currval('seq_buch');
currval
---------
4
(1 row)
Obwohl die rechte Transaktion die Sequence bereits inkrementiert hat, liefert der Aufruf von currval immer noch vier. Dieses Feature kann wie folgt verwendet werden:
test=# INSERT INTO t_daten VALUES (nextval('seq_buch'));
INSERT 5938172 1
test=# SELECT currval('seq_buch');
currval
---------
6
(1 row)
Dieses Set von SQL-Statements ist absolut sicher und funktioniert auch dann,
wenn gleichzeitig agierende Transaktionen den Wert der Sequenz verändern.