Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6d1bdd5

Browse files
committed
Doc: improve documentation about nextval()/setval().
Clarify that the results of nextval and setval are not guaranteedpersistent until the calling transaction commits. Some peopleseem to have drawn the opposite conclusion from the statement thatthese functions are never rolled back, so re-word to avoid sayingit quite that way.Discussion:https://postgr.es/m/CAKU4AWohO=NfM-4KiZWvdc+z3c1C9FrUBR6xnReFJ6sfy0i=Lw@mail.gmail.com
1 parent88482d7 commit6d1bdd5

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

‎doc/src/sgml/func.sgml

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17300,24 +17300,37 @@ SELECT setval('myseq', 42, false); <lineannotation>Next <function>nextval</fu
1730017300
<caution>
1730117301
<para>
1730217302
To avoid blocking concurrent transactions that obtain numbers from
17303-
the same sequence,a<function>nextval</function> operation is never
17304-
rolled back; that is, once a value has been fetched it is considered
17305-
used and will not be returned again. This is true even if the
17306-
surrounding transaction later aborts, or if the calling query ends
17307-
up not using the value. For example an <command>INSERT</command> with
17303+
the same sequence,the value obtained by<function>nextval</function>
17304+
is not reclaimed for re-use if the calling transaction later aborts.
17305+
This means that transaction aborts or database crashes can result in
17306+
gaps in the sequence of assigned values. That can happen without a
17307+
transaction abort, too. For example an <command>INSERT</command> with
1730817308
an <literal>ON CONFLICT</literal> clause will compute the to-be-inserted
1730917309
tuple, including doing any required <function>nextval</function>
1731017310
calls, before detecting any conflict that would cause it to follow
17311-
the <literal>ON CONFLICT</literal> rule instead. Such cases will leave
17312-
unused <quote>holes</quote> in the sequence of assigned values.
17311+
the <literal>ON CONFLICT</literal> rule instead.
1731317312
Thus, <productname>PostgreSQL</productname> sequence
1731417313
objects <emphasis>cannot be used to obtain <quote>gapless</quote>
1731517314
sequences</emphasis>.
1731617315
</para>
1731717316

1731817317
<para>
17319-
Likewise, any sequence state changes made by <function>setval</function>
17320-
are not undone if the transaction rolls back.
17318+
Likewise, sequence state changes made by <function>setval</function>
17319+
are immediately visible to other transactions, and are not undone if
17320+
the calling transaction rolls back.
17321+
</para>
17322+
17323+
<para>
17324+
If the database cluster crashes before committing a transaction
17325+
containing a <function>nextval</function>
17326+
or <function>setval</function> call, the sequence state change might
17327+
not have made its way to persistent storage, so that it is uncertain
17328+
whether the sequence will have its original or updated state after the
17329+
cluster restarts. This is harmless for usage of the sequence within
17330+
the database, since other effects of uncommitted transactions will not
17331+
be visible either. However, if you wish to use a sequence value for
17332+
persistent outside-the-database purposes, make sure that the
17333+
<function>nextval</function> call has been committed before doing so.
1732117334
</para>
1732217335
</caution>
1732317336

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp