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 ( + + <literal>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. + + + <literal>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;