Update SET CONSTRAINTS reference page --- it failed to mention EXCLUDE

constraints and was lacking a couple of other interesting details.
This commit is contained in:
Tom Lane 2010-01-18 00:32:21 +00:00
parent 9a915e596f
commit 04ef404018

View File

@ -1,4 +1,4 @@
<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/set_constraints.sgml,v 1.17 2009/07/29 20:56:17 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/ref/set_constraints.sgml,v 1.18 2010/01/18 00:32:21 tgl Exp $ -->
<refentry id="SQL-SET-CONSTRAINTS"> <refentry id="SQL-SET-CONSTRAINTS">
<refmeta> <refmeta>
<refentrytitle id="SQL-SET-CONSTRAINTS-title">SET CONSTRAINTS</refentrytitle> <refentrytitle id="SQL-SET-CONSTRAINTS-title">SET CONSTRAINTS</refentrytitle>
@ -8,7 +8,7 @@
<refnamediv> <refnamediv>
<refname>SET CONSTRAINTS</refname> <refname>SET CONSTRAINTS</refname>
<refpurpose>set constraint checking modes for the current transaction</refpurpose> <refpurpose>set constraint check timing for the current transaction</refpurpose>
</refnamediv> </refnamediv>
<indexterm zone="sql-set-constraints"> <indexterm zone="sql-set-constraints">
@ -46,7 +46,8 @@ SET CONSTRAINTS { ALL | <replaceable class="parameter">name</replaceable> [, ...
<para> <para>
<command>SET CONSTRAINTS</command> with a list of constraint names changes <command>SET CONSTRAINTS</command> with a list of constraint names changes
the mode of just those constraints (which must all be deferrable). The the mode of just those constraints (which must all be deferrable). Each
constraint name can be schema-qualified. The
current schema search path is used to find the first matching name if current schema search path is used to find the first matching name if
no schema name is specified. <command>SET CONSTRAINTS ALL</command> no schema name is specified. <command>SET CONSTRAINTS ALL</command>
changes the mode of all deferrable constraints. changes the mode of all deferrable constraints.
@ -66,13 +67,14 @@ SET CONSTRAINTS { ALL | <replaceable class="parameter">name</replaceable> [, ...
</para> </para>
<para> <para>
Currently, only <literal>UNIQUE</>, <literal>PRIMARY KEY</>, and Currently, only <literal>UNIQUE</>, <literal>PRIMARY KEY</>,
<literal>REFERENCES</> (foreign key) constraints are affected by this <literal>REFERENCES</> (foreign key), and <literal>EXCLUDE</>
setting. <literal>NOT NULL</> and <literal>CHECK</> constraints are constraints are affected by this setting.
<literal>NOT NULL</> and <literal>CHECK</> constraints are
always checked immediately when a row is inserted or modified always checked immediately when a row is inserted or modified
(<emphasis>not</> at the end of the statement). (<emphasis>not</> at the end of the statement).
Uniqueness constraints that have not been declared <literal>DEFERRABLE</> Uniqueness and exclusion constraints that have not been declared
are also checked immediately. <literal>DEFERRABLE</> are also checked immediately.
</para> </para>
<para> <para>
@ -85,6 +87,16 @@ SET CONSTRAINTS { ALL | <replaceable class="parameter">name</replaceable> [, ...
<refsect1> <refsect1>
<title>Notes</title> <title>Notes</title>
<para>
Because <productname>PostgreSQL</productname> does not require constraint
names to be unique within a schema (but only per-table), it is possible
that there is more than one match for a specified constraint name.
In this case <command>SET CONSTRAINTS</command> will act on all matches.
For a non-schema-qualified name, once a match or matches have been found in
some schema in the search path, schemas appearing later in the path are not
searched.
</para>
<para> <para>
This command only alters the behavior of constraints within the This command only alters the behavior of constraints within the
current transaction. Thus, if you execute this command outside of a current transaction. Thus, if you execute this command outside of a
@ -100,8 +112,11 @@ SET CONSTRAINTS { ALL | <replaceable class="parameter">name</replaceable> [, ...
<para> <para>
This command complies with the behavior defined in the SQL This command complies with the behavior defined in the SQL
standard, except for the limitation that, in standard, except for the limitation that, in
<productname>PostgreSQL</productname>, it only applies to <productname>PostgreSQL</productname>, it does not apply to
foreign-key and uniqueness constraints. <literal>NOT NULL</> and <literal>CHECK</> constraints.
Also, <productname>PostgreSQL</productname> checks non-deferrable
uniqueness constraints immediately, not at end of statement as the
standard would suggest.
</para> </para>
</refsect1> </refsect1>