aboutsummaryrefslogtreecommitdiff
path: root/doc/src
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src')
-rw-r--r--doc/src/sgml/datatype.sgml14
-rw-r--r--doc/src/sgml/func.sgml48
2 files changed, 42 insertions, 20 deletions
diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index 9dfecbbbc3b..b62ee05a4c2 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -803,6 +803,20 @@ ALTER SEQUENCE <replaceable class="parameter">tablename</replaceable>_<replaceab
</para>
<note>
+ <para>
+ Because <type>smallserial</type>, <type>serial</type> and
+ <type>bigserial</type> are implemented usings sequences, there may
+ be "holes" or gaps in the sequence of values which appears in the
+ column, even if no rows are ever deleted. This is a value allocated
+ from the sequence is still "used up" even if a row containing that
+ value is never successfully inserted into the table column. This
+ may happen, for example, if the inserting transaction rolls back.
+ See <literal>nextval()</literal> in <xref linkend="functions-sequence">
+ for details.
+ </para>
+ </note>
+
+ <note>
<para>
Prior to <productname>PostgreSQL</productname> 7.3, <type>serial</type>
implied <literal>UNIQUE</literal>. This is no longer automatic. If
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 4eb91311e6b..fcad177b7d2 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -9741,6 +9741,27 @@ nextval('foo'::text) <lineannotation><literal>foo</literal> is looked up at
execute <function>nextval</function> concurrently, each will safely receive
a distinct sequence value.
</para>
+
+ <para>
+ If a sequence object has been created with default parameters,
+ successive <function>nextval</function> calls will return successive
+ values beginning with 1. Other behaviors can be obtained by using
+ special parameters in the <xref linkend="sql-createsequence"> command;
+ see its command reference page for more information.
+ </para>
+
+ <important>
+ <para>
+ To avoid blocking concurrent transactions that obtain numbers from the
+ same sequence, a <function>nextval</function> operation is never
+ rolled back; that is, once a value has been fetched it is considered
+ used, even if the transaction that did the
+ <function>nextval</function> later aborts. This means that aborted
+ transactions might leave unused <quote>holes</quote> in the sequence
+ of assigned values.
+ </para>
+ </important>
+
</listitem>
</varlistentry>
@@ -9804,31 +9825,18 @@ SELECT setval('foo', 42, false); <lineannotation>Next <function>nextval</> wi
The result returned by <function>setval</function> is just the value of its
second argument.
</para>
+ <important>
+ <para>
+ Because sequences are non-transactional, changes made by
+ <function>setval</function> are not undone if the transaction rolls
+ back.
+ </para>
+ </important>
</listitem>
</varlistentry>
</variablelist>
</para>
- <para>
- If a sequence object has been created with default parameters,
- successive <function>nextval</function> calls will return successive values
- beginning with 1. Other behaviors can be obtained by using
- special parameters in the <xref linkend="sql-createsequence"> command;
- see its command reference page for more information.
- </para>
-
- <important>
- <para>
- To avoid blocking concurrent transactions that obtain numbers from the
- same sequence, a <function>nextval</function> operation is never rolled back;
- that is, once a value has been fetched it is considered used, even if the
- transaction that did the <function>nextval</function> later aborts. This means
- that aborted transactions might leave unused <quote>holes</quote> in the
- sequence of assigned values. <function>setval</function> operations are never
- rolled back, either.
- </para>
- </important>
-
</sect1>