diff options
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/catalogs.sgml | 11 | ||||
-rw-r--r-- | doc/src/sgml/ref/alter_table.sgml | 31 | ||||
-rw-r--r-- | doc/src/sgml/ref/create_table.sgml | 35 |
3 files changed, 71 insertions, 6 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 4f56188a1cf..4978b47f0e4 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -4739,6 +4739,17 @@ SCRAM-SHA-256$<replaceable><iteration count></>:<replaceable><salt>< </row> <row> + <entry><structfield>partdefid</structfield></entry> + <entry><type>oid</type></entry> + <entry><literal><link linkend="catalog-pg-class"><structname>pg_class</structname></link>.oid</literal></entry> + <entry> + The OID of the <structname>pg_class</> entry for the default partition + of this partitioned table, or zero if this partitioned table does not + have a default partition. + </entry> + </row> + + <row> <entry><structfield>partattrs</structfield></entry> <entry><type>int2vector</type></entry> <entry><literal><link linkend="catalog-pg-attribute"><structname>pg_attribute</structname></link>.attnum</literal></entry> diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index dae63077eed..0fb385ece7a 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -34,7 +34,7 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> ALTER TABLE ALL IN TABLESPACE <replaceable class="PARAMETER">name</replaceable> [ OWNED BY <replaceable class="PARAMETER">role_name</replaceable> [, ... ] ] SET TABLESPACE <replaceable class="PARAMETER">new_tablespace</replaceable> [ NOWAIT ] ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> - ATTACH PARTITION <replaceable class="PARAMETER">partition_name</replaceable> FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> + ATTACH PARTITION <replaceable class="PARAMETER">partition_name</replaceable> { FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> | DEFAULT } ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> DETACH PARTITION <replaceable class="PARAMETER">partition_name</replaceable> @@ -765,11 +765,18 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> </varlistentry> <varlistentry> - <term><literal>ATTACH PARTITION <replaceable class="PARAMETER">partition_name</replaceable> FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable></literal></term> + <term><literal>ATTACH PARTITION <replaceable class="PARAMETER">partition_name</replaceable> { FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> | DEFAULT }</literal></term> <listitem> <para> This form attaches an existing table (which might itself be partitioned) - as a partition of the target table using the same syntax for + as a partition of the target table. The table can be attached + as a partition for specific values using <literal>FOR VALUES + </literal> or as a default partition by using <literal>DEFAULT + </literal>. + </para> + + <para> + A partition using <literal>FOR VALUES</literal> uses same syntax for <replaceable class="PARAMETER">partition_bound_spec</replaceable> as <xref linkend="sql-createtable">. The partition bound specification must correspond to the partitioning strategy and partition key of the @@ -806,6 +813,17 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> (See the discussion in <xref linkend="SQL-CREATEFOREIGNTABLE"> about constraints on the foreign table.) </para> + + <para> + When a table has a default partition, defining a new partition changes + the partition constraint for the default partition. The default + partition can't contain any rows that would need to be moved to the new + partition, and will be scanned to verify that none are present. This + scan, like the scan of the new partition, can be avoided if an + appropriate <literal>CHECK</literal> constraint is present. Also like + the scan of the new partition, it is always skipped when the default + partition is a foreign table. + </para> </listitem> </varlistentry> @@ -1396,6 +1414,13 @@ ALTER TABLE cities </programlisting></para> <para> + Attach a default partition to a partitioned table: +<programlisting> +ALTER TABLE cities + ATTACH PARTITION cities_partdef DEFAULT; +</programlisting></para> + + <para> Detach a partition from partitioned table: <programlisting> ALTER TABLE measurement diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index a6ca5902499..824253de404 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -49,7 +49,7 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI { <replaceable class="PARAMETER">column_name</replaceable> [ WITH OPTIONS ] [ <replaceable class="PARAMETER">column_constraint</replaceable> [ ... ] ] | <replaceable>table_constraint</replaceable> } [, ... ] -) ] FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> +) ] { FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> | DEFAULT } [ PARTITION BY { RANGE | LIST } ( { <replaceable class="parameter">column_name</replaceable> | ( <replaceable class="parameter">expression</replaceable> ) } [ COLLATE <replaceable class="parameter">collation</replaceable> ] [ <replaceable class="parameter">opclass</replaceable> ] [, ... ] ) ] [ WITH ( <replaceable class="PARAMETER">storage_parameter</replaceable> [= <replaceable class="PARAMETER">value</replaceable>] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] @@ -250,11 +250,13 @@ FROM ( { <replaceable class="PARAMETER">numeric_literal</replaceable> | <replace </varlistentry> <varlistentry id="SQL-CREATETABLE-PARTITION"> - <term><literal>PARTITION OF <replaceable class="PARAMETER">parent_table</replaceable> FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable></literal></term> + <term><literal>PARTITION OF <replaceable class="PARAMETER">parent_table</replaceable> { FOR VALUES <replaceable class="PARAMETER">partition_bound_spec</replaceable> | DEFAULT }</literal></term> <listitem> <para> Creates the table as a <firstterm>partition</firstterm> of the specified - parent table. + parent table. The table can be created either as a partition for specific + values using <literal>FOR VALUES</literal> or as a default partition + using <literal>DEFAULT</literal>. </para> <para> @@ -343,6 +345,26 @@ FROM ( { <replaceable class="PARAMETER">numeric_literal</replaceable> | <replace </para> <para> + If <literal>DEFAULT</literal> is specified, the table will be + created as a default partition of the parent table. The parent can + either be a list or range partitioned table. A partition key value + not fitting into any other partition of the given parent will be + routed to the default partition. There can be only one default + partition for a given parent table. + </para> + + <para> + When a table has an existing <literal>DEFAULT</literal> partition and + a new partition is added to it, the existing default partition must + be scanned to verify that it does not contain any rows which properly + belong in the new partition. If the default partition contains a + large number of rows, this may be slow. The scan will be skipped if + the default partition is a foreign table or if it has a constraint which + proves that it cannot contain rows which should be placed in the new + partition. + </para> + + <para> A partition must have the same column names and types as the partitioned table to which it belongs. If the parent is specified <literal>WITH OIDS</literal> then all partitions must have OIDs; the parent's OID @@ -1679,6 +1701,13 @@ CREATE TABLE cities_ab CREATE TABLE cities_ab_10000_to_100000 PARTITION OF cities_ab FOR VALUES FROM (10000) TO (100000); </programlisting></para> + + <para> + Create a default partition: +<programlisting> +CREATE TABLE cities_partdef + PARTITION OF cities DEFAULT; +</programlisting></para> </refsect1> <refsect1 id="SQL-CREATETABLE-compatibility"> |