Doc: mention CREATE+ATTACH PARTITION with CREATE TABLE...PARTITION OF.

Clarify that ATTACH/DETACH PARTITION can be used to perform partition
maintenance with less locking than straight CREATE TABLE/DROP TABLE.
This was already stated in some places, but not emphasized.

Back-patch to v14 where DETACH PARTITION CONCURRENTLY was added.
(We had lower lock levels for ATTACH PARTITION before that, but
this wording wouldn't apply.)

Justin Pryzby, reviewed by Robert Treat and Jakub Wartak;
a little further wordsmithing by me

Discussion: https://postgr.es/m/20220718143304.GC18011@telsasoft.com
This commit is contained in:
Tom Lane 2023-03-16 16:50:56 -04:00
parent 3908d6ae11
commit b0488cb511
2 changed files with 23 additions and 10 deletions

View File

@ -4072,9 +4072,15 @@ CREATE TABLE measurement_y2008m02 PARTITION OF measurement
</programlisting>
As an alternative, it is sometimes more convenient to create the
new table outside the partition structure, and make it a proper
new table outside the partition structure, and attach it as a
partition later. This allows new data to be loaded, checked, and
transformed prior to it appearing in the partitioned table.
Moreover, the <literal>ATTACH PARTITION</literal> operation requires
only <literal>SHARE UPDATE EXCLUSIVE</literal> lock on the
partitioned table, as opposed to the <literal>ACCESS
EXCLUSIVE</literal> lock that is required by <command>CREATE TABLE
... PARTITION OF</command>, so it is more friendly to concurrent
operations on the partitioned table.
The <literal>CREATE TABLE ... LIKE</literal> option is helpful
to avoid tediously repeating the parent table's definition:
@ -4094,11 +4100,6 @@ ALTER TABLE measurement ATTACH PARTITION measurement_y2008m02
</programlisting>
</para>
<para>
The <command>ATTACH PARTITION</command> command requires taking a
<literal>SHARE UPDATE EXCLUSIVE</literal> lock on the partitioned table.
</para>
<para>
Before running the <command>ATTACH PARTITION</command> command, it is
recommended to create a <literal>CHECK</literal> constraint on the table to

View File

@ -586,12 +586,24 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
</para>
<para>
Operations such as TRUNCATE which normally affect a table and all of its
Operations such as <command>TRUNCATE</command>
which normally affect a table and all of its
inheritance children will cascade to all partitions, but may also be
performed on an individual partition. Note that dropping a partition
with <literal>DROP TABLE</literal> requires taking an <literal>ACCESS
EXCLUSIVE</literal> lock on the parent table.
performed on an individual partition.
</para>
<para>
Note that creating a partition using <literal>PARTITION OF</literal>
requires taking an <literal>ACCESS EXCLUSIVE</literal> lock on the
parent partitioned table. Likewise, dropping a partition
with <command>DROP TABLE</command> requires taking
an <literal>ACCESS EXCLUSIVE</literal> lock on the parent table.
It is possible to use <link linkend="sql-altertable"><command>ALTER
TABLE ATTACH/DETACH PARTITION</command></link> to perform these
operations with a weaker lock, thus reducing interference with
concurrent operations on the partitioned table.
</para>
</listitem>
</varlistentry>