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:
parent
4f63f6aae0
commit
ec1fe23afa
@ -82,8 +82,9 @@ RELEASE [ SAVEPOINT ] <replaceable>savepoint_name</replaceable>
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
If multiple savepoints have the same name, only the one that was most
|
If multiple savepoints have the same name, only the most recently defined
|
||||||
recently defined is released.
|
unreleased one is released. Repeated commands will release progressively
|
||||||
|
older savepoints.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
@ -53,7 +53,9 @@ SAVEPOINT <replaceable>savepoint_name</replaceable>
|
|||||||
<term><replaceable>savepoint_name</replaceable></term>
|
<term><replaceable>savepoint_name</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<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>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -106,6 +108,32 @@ COMMIT;
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
The above transaction will insert both 3 and 4.
|
The above transaction will insert both 3 and 4.
|
||||||
</para>
|
</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>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user