Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Doc: clarify that CREATE TABLE discards redundant unique constraints.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Dec 2020 18:09:48 +0000 (13:09 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Dec 2020 18:09:48 +0000 (13:09 -0500)
The SQL standard says that redundant unique constraints are disallowed,
but we long ago decided that throwing an error would be too
user-unfriendly, so we just drop redundant ones.  The docs weren't very
clear about that though, as this behavior was only explained for PRIMARY
KEY vs UNIQUE, not UNIQUE vs UNIQUE.

While here, I couldn't resist doing some copy-editing and markup-fixing
on the adjacent text about INCLUDE options.

Per bug #16767 from Matthias vd Meent.

Discussion: https://postgr.es/m/16767-1714a2056ca516d0@postgresql.org

doc/src/sgml/ref/create_table.sgml

index b9eeb0117cacf65fd65b255b0ac6fecce9af58f0..7d00d22c64629a47ebaa405201d7179ef574f3f4 100644 (file)
@@ -720,9 +720,11 @@ FROM ( { <replaceable class="PARAMETER">numeric_literal</replaceable> | <replace
      <para>
       The <literal>UNIQUE</literal> constraint specifies that a
       group of one or more columns of a table can contain
-      only unique values. The behavior of the unique table constraint
-      is the same as that for column constraints, with the additional
-      capability to span multiple columns.
+      only unique values. The behavior of a unique table constraint
+      is the same as that of a unique column constraint, with the
+      additional capability to span multiple columns.  The constraint
+      therefore enforces that any two rows must differ in at least one
+      of these columns.
      </para>
 
      <para>
@@ -731,10 +733,10 @@ FROM ( { <replaceable class="PARAMETER">numeric_literal</replaceable> | <replace
      </para>
 
      <para>
-      Each unique table constraint must name a set of columns that is
+      Each unique constraint should name a set of columns that is
       different from the set of columns named by any other unique or
-      primary key constraint defined for the table.  (Otherwise it
-      would just be the same constraint listed twice.)
+      primary key constraint defined for the table.  (Otherwise, redundant
+      unique constraints will be discarded.)
      </para>
     </listitem>
    </varlistentry>
@@ -759,11 +761,17 @@ FROM ( { <replaceable class="PARAMETER">numeric_literal</replaceable> | <replace
 
      <para>
       <literal>PRIMARY KEY</literal> enforces the same data constraints as
-      a combination of <literal>UNIQUE</> and <literal>NOT NULL</>, but
+      a combination of <literal>UNIQUE</> and <literal>NOT NULL</>.  However,
       identifying a set of columns as the primary key also provides metadata
       about the design of the schema, since a primary key implies that other
       tables can rely on this set of columns as a unique identifier for rows.
      </para>
+
+     <para>
+      Adding a <literal>PRIMARY KEY</literal> constraint will automatically
+      create a unique btree index on the column or group of columns used in the
+      constraint.
+     </para>
     </listitem>
    </varlistentry>