diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index b449520940..f74b9840a0 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -251,6 +251,145 @@ WITH ( MODULUS numeric_literal, REM + + column_name + + + The name of a column to be created in the new table. + + + + + + data_type + + + The data type of the column. This can include array + specifiers. For more information on the data types supported by + PostgreSQL, refer to . + + + + + + COLLATE collation + + + The COLLATE clause assigns a collation to + the column (which must be of a collatable data type). + If not specified, the column data type's default collation is used. + + + + + + INHERITS ( parent_table [, ... ] ) + + + The optional INHERITS clause specifies a list of + tables from which the new table automatically inherits all + columns. Parent tables can be plain tables or foreign tables. + + + + Use of INHERITS creates a persistent relationship + between the new child table and its parent table(s). Schema + modifications to the parent(s) normally propagate to children + as well, and by default the data of the child table is included in + scans of the parent(s). + + + + If the same column name exists in more than one parent + table, an error is reported unless the data types of the columns + match in each of the parent tables. If there is no conflict, + then the duplicate columns are merged to form a single column in + the new table. If the column name list of the new table + contains a column name that is also inherited, the data type must + likewise match the inherited column(s), and the column + definitions are merged into one. If the + new table explicitly specifies a default value for the column, + this default overrides any defaults from inherited declarations + of the column. Otherwise, any parents that specify default + values for the column must all specify the same default, or an + error will be reported. + + + + CHECK constraints are merged in essentially the same way as + columns: if multiple parent tables and/or the new table definition + contain identically-named CHECK constraints, these + constraints must all have the same check expression, or an error will be + reported. Constraints having the same name and expression will + be merged into one copy. A constraint marked NO INHERIT in a + parent will not be considered. Notice that an unnamed CHECK + constraint in the new table will never be merged, since a unique name + will always be chosen for it. + + + + Column STORAGE settings are also copied from parent tables. + + + + If a column in the parent table is an identity column, that property is + not inherited. A column in the child table can be declared identity + column if desired. + + + + + + PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ opclass ] [, ...] ) + + + The optional PARTITION BY clause specifies a strategy + of partitioning the table. The table thus created is called a + partitioned table. The parenthesized list of + columns or expressions forms the partition key + for the table. When using range or hash partitioning, the partition key + can include multiple columns or expressions (up to 32, but this limit can + be altered when building PostgreSQL), but for + list partitioning, the partition key must consist of a single column or + expression. + + + + Range and list partitioning require a btree operator class, while hash + partitioning requires a hash operator class. If no operator class is + specified explicitly, the default operator class of the appropriate + type will be used; if no default operator class exists, an error will + be raised. When hash partitioning is used, the operator class used + must implement support function 2 (see + for details). + + + + A partitioned table is divided into sub-tables (called partitions), + which are created using separate CREATE TABLE commands. + The partitioned table is itself empty. A data row inserted into the + table is routed to a partition based on the value of columns or + expressions in the partition key. If no existing partition matches + the values in the new row, an error will be reported. + + + + Partitioned tables do not support EXCLUDE constraints; + however, you can define these constraints on individual partitions. + Also, while it's possible to define PRIMARY KEY + constraints on partitioned tables, creating foreign keys that + reference a partitioned table is not yet supported. + + + + See for more discussion on table + partitioning. + + + + + PARTITION OF parent_table { FOR VALUES partition_bound_spec | DEFAULT } @@ -421,140 +560,6 @@ WITH ( MODULUS numeric_literal, REM - - column_name - - - The name of a column to be created in the new table. - - - - - - data_type - - - The data type of the column. This can include array - specifiers. For more information on the data types supported by - PostgreSQL, refer to . - - - - - - COLLATE collation - - - The COLLATE clause assigns a collation to - the column (which must be of a collatable data type). - If not specified, the column data type's default collation is used. - - - - - - INHERITS ( parent_table [, ... ] ) - - - The optional INHERITS clause specifies a list of - tables from which the new table automatically inherits all - columns. Parent tables can be plain tables or foreign tables. - - - - Use of INHERITS creates a persistent relationship - between the new child table and its parent table(s). Schema - modifications to the parent(s) normally propagate to children - as well, and by default the data of the child table is included in - scans of the parent(s). - - - - If the same column name exists in more than one parent - table, an error is reported unless the data types of the columns - match in each of the parent tables. If there is no conflict, - then the duplicate columns are merged to form a single column in - the new table. If the column name list of the new table - contains a column name that is also inherited, the data type must - likewise match the inherited column(s), and the column - definitions are merged into one. If the - new table explicitly specifies a default value for the column, - this default overrides any defaults from inherited declarations - of the column. Otherwise, any parents that specify default - values for the column must all specify the same default, or an - error will be reported. - - - - CHECK constraints are merged in essentially the same way as - columns: if multiple parent tables and/or the new table definition - contain identically-named CHECK constraints, these - constraints must all have the same check expression, or an error will be - reported. Constraints having the same name and expression will - be merged into one copy. A constraint marked NO INHERIT in a - parent will not be considered. Notice that an unnamed CHECK - constraint in the new table will never be merged, since a unique name - will always be chosen for it. - - - - Column STORAGE settings are also copied from parent tables. - - - - If a column in the parent table is an identity column, that property is - not inherited. A column in the child table can be declared identity - column if desired. - - - - - - PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [ opclass ] [, ...] ) - - - The optional PARTITION BY clause specifies a strategy - of partitioning the table. The table thus created is called a - partitioned table. The parenthesized list of - columns or expressions forms the partition key - for the table. When using range or hash partitioning, the partition key - can include multiple columns or expressions (up to 32, but this limit can - be altered when building PostgreSQL), but for - list partitioning, the partition key must consist of a single column or - expression. - - - - Range and list partitioning require a btree operator class, while hash - partitioning requires a hash operator class. If no operator class is - specified explicitly, the default operator class of the appropriate - type will be used; if no default operator class exists, an error will - be raised. When hash partitioning is used, the operator class used - must implement support function 2 (see - for details). - - - - A partitioned table is divided into sub-tables (called partitions), - which are created using separate CREATE TABLE commands. - The partitioned table is itself empty. A data row inserted into the - table is routed to a partition based on the value of columns or - expressions in the partition key. If no existing partition matches - the values in the new row, an error will be reported. - - - - Partitioned tables do not support EXCLUDE constraints; - however, you can define these constraints on individual partitions. - Also, while it's possible to define PRIMARY KEY - constraints on partitioned tables, creating foreign keys that - reference a partitioned table is not yet supported. - - - - - LIKE source_table [ like_option ... ]