doc: clarify the behavior of identically-named savepoints

Original patch by David G. Johnston.

Reported-by: David G. Johnston

Discussion: https://postgr.es/m/CAKFQuwYQCxSSuSL18skCWG8QHFswOJ3hjovHsOZUE346i4OpVQ@mail.gmail.com

Backpatch-through: 10
This commit is contained in:
Bruce Momjian 2022-07-14 15:44:22 -04:00
parent 4f63f6aae0
commit ec1fe23afa
2 changed files with 32 additions and 3 deletions

View File

@ -82,8 +82,9 @@ RELEASE [ SAVEPOINT ] <replaceable>savepoint_name</replaceable>
</para>
<para>
If multiple savepoints have the same name, only the one that was most
recently defined is released.
If multiple savepoints have the same name, only the most recently defined
unreleased one is released. Repeated commands will release progressively
older savepoints.
</para>
</refsect1>

View File

@ -53,7 +53,9 @@ SAVEPOINT <replaceable>savepoint_name</replaceable>
<term><replaceable>savepoint_name</replaceable></term>
<listitem>
<para>
The name to give to the new savepoint.
The name to give to the new savepoint. If savepoints with the
same name already exist, they will be inaccessible until newer
identically-named savepoints are released.
</para>
</listitem>
</varlistentry>
@ -106,6 +108,32 @@ COMMIT;
</programlisting>
The above transaction will insert both 3 and 4.
</para>
<para>
To use a single savepoint name:
<programlisting>
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
-- rollback to the second savepoint
ROLLBACK TO SAVEPOINT my_savepoint;
SELECT * FROM table1; -- shows rows 1 and 2
-- release the second savepoint
RELEASE SAVEPOINT my_savepoint;
-- rollback to the first savepoint
ROLLBACK TO SAVEPOINT my_savepoint;
SELECT * FROM table1; -- shows only row 1
COMMIT;
</programlisting>
The above transaction shows row 3 being rolled back first, then row 2.
</para>
</refsect1>
<refsect1>