Document lack of validation when attaching foreign partitions.

Ashutosh Bapat, revised a bit by me.

Discussion: http://postgr.es/m/CAFjFpRdLaCa-1wJase0=YWG5o3cJnbuUt_vrqm2TDBKM_vQ_oA@mail.gmail.com
This commit is contained in:
Robert Haas 2017-03-09 13:09:48 -05:00
parent 054637d2e0
commit b54aad8e34
1 changed files with 19 additions and 12 deletions

View File

@ -743,18 +743,25 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
</para>
<para>
A full table scan is performed on the table being attached to check that
no existing row in the table violates the partition constraint. It is
possible to avoid this scan by adding a valid <literal>CHECK</literal>
constraint to the table that would allow only the rows satisfying the
desired partition constraint before running this command. It will be
determined using such a constraint that the table need not be scanned
to validate the partition constraint. This does not work, however, if
any of the partition keys is an expression and the partition does not
accept <literal>NULL</literal> values. If attaching a list partition
that will not accept <literal>NULL</literal> values, also add
<literal>NOT NULL</literal> constraint to the partition key column,
unless it's an expression.
If the new partition is a regular table, a full table scan is performed
to check that no existing row in the table violates the partition
constraint. It is possible to avoid this scan by adding a valid
<literal>CHECK</literal> constraint to the table that would allow only
the rows satisfying the desired partition constraint before running this
command. It will be determined using such a constraint that the table
need not be scanned to validate the partition constraint. This does not
work, however, if any of the partition keys is an expression and the
partition does not accept <literal>NULL</literal> values. If attaching
a list partition that will not accept <literal>NULL</literal> values,
also add <literal>NOT NULL</literal> constraint to the partition key
column, unless it's an expression.
</para>
<para>
If the new partition is a foreign table, nothing is done to verify
that all the rows in the foreign table obey the partition constraint.
(See the discussion in <xref linkend="SQL-CREATEFOREIGNTABLE"> about
constraints on the foreign table.)
</para>
</listitem>
</varlistentry>