diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml
index 0a6e0fc87a8..fc92d6bc588 100644
--- a/doc/src/sgml/ref/create_table.sgml
+++ b/doc/src/sgml/ref/create_table.sgml
@@ -321,26 +321,33 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
table.
- Default expressions for the copied column definitions will only be
- copied if INCLUDING DEFAULTS is specified. The
+ Default expressions for the copied column definitions will be copied
+ only if INCLUDING DEFAULTS is specified. The
default behavior is to exclude default expressions, resulting in the
copied columns in the new table having null defaults.
+ Note that copying defaults that call database-modification functions,
+ such as nextval>, may create a functional linkage between
+ the original and new tables.
Not-null constraints are always copied to the new table.
- CHECK constraints will only be copied if
- INCLUDING CONSTRAINTS is specified; other types of
- constraints will never be copied. Also, no distinction is made between
- column constraints and table constraints — when constraints are
- requested, all check constraints are copied.
+ CHECK constraints will be copied only if
+ INCLUDING CONSTRAINTS is specified.
+ No distinction is made between column constraints and table
+ constraints.
- Any indexes on the original table will not be created on the new
- table, unless the INCLUDING INDEXES clause is
- specified.
+ Indexes, PRIMARY KEY>, UNIQUE>,
+ and EXCLUDE> constraints on the original table will be
+ created on the new table only if INCLUDING INDEXES
+ is specified. Names for the new indexes and constraints are
+ chosen according to the default rules, regardless of how the originals
+ were named. (This behavior avoids possible duplicate-name failures for
+ the new indexes.)
- STORAGE> settings for the copied column definitions will only
- be copied if INCLUDING STORAGE is specified. The
+
+ STORAGE> settings for the copied column definitions will be
+ copied only if INCLUDING STORAGE is specified. The
default behavior is to exclude STORAGE> settings, resulting
in the copied columns in the new table having type-specific default
settings. For more on STORAGE> settings, see
@@ -348,19 +355,20 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
Comments for the copied columns, constraints, and indexes
- will only be copied if INCLUDING COMMENTS
+ will be copied only if INCLUDING COMMENTS
is specified. The default behavior is to exclude comments, resulting in
the copied columns and constraints in the new table having no comments.
- INCLUDING ALL is an abbreviated form of
+
+ INCLUDING ALL is an abbreviated form of
INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS.
- Note also that unlike INHERITS, columns and
+ Note that unlike INHERITS, columns and
constraints copied by LIKE> are not merged with similarly
named columns and constraints.
If the same name is specified explicitly or in another
- LIKE clause, an error is signalled.
+ LIKE clause, an error is signaled.
@@ -1381,6 +1389,17 @@ CREATE TABLE employees OF employee_type (
+
+ LIKE> Clause
+
+
+ While a LIKE> clause exists in the SQL standard, many of the
+ options that PostgreSQL accepts for it are not
+ in the standard, and some of the standard's options are not implemented
+ by PostgreSQL.
+
+
+
WITH> Clause
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index eb4e4212fc9..0ba59927eed 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -1010,7 +1010,9 @@ generateClonedIndexStmt(CreateStmtContext *cxt, Relation source_idx,
/*
* We don't try to preserve the name of the source index; instead, just
- * let DefineIndex() choose a reasonable name.
+ * let DefineIndex() choose a reasonable name. (If we tried to preserve
+ * the name, we'd get duplicate-relation-name failures unless the source
+ * table was in a different schema.)
*/
index->idxname = NULL;