aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rowley <drowley@postgresql.org>2021-07-28 15:01:10 +1200
committerDavid Rowley <drowley@postgresql.org>2021-07-28 15:01:10 +1200
commitc590904d50cc93b12fc895041c34e1ea821e768c (patch)
treec1b7b83cb0fd53e7f5a330731ff616566ff03e92
parent6feb229f53f8de704ee2ff709d2c44e1c4d6be92 (diff)
downloadpostgresql-c590904d50cc93b12fc895041c34e1ea821e768c.tar.gz
postgresql-c590904d50cc93b12fc895041c34e1ea821e768c.zip
Doc: Clarify lock levels taken during ATTACH PARTITION
It wasn't all that clear which lock levels, if any, would be held on the DEFAULT partition during an ATTACH PARTITION operation. Also, clarify which locks will be taken if the DEFAULT partition or the table being attached are themselves partitioned tables. Here I'm only backpatching to v12 as before then we obtained an ACCESS EXCLUSIVE lock on the partitioned table. It seems much less relevant to mention which locks are taken on other tables when the partitioned table itself is locked with an ACCESS EXCLUSIVE lock. Author: Matthias van de Meent, David Rowley Discussion: https://postgr.es/m/CAEze2WiTB6iwrV8W_J=fnrnZ7fowW3qu-8iQ8zCHP3FiQ6+o-A@mail.gmail.com Backpatch-through: 12
-rw-r--r--doc/src/sgml/ddl.sgml28
-rw-r--r--doc/src/sgml/ref/alter_table.sgml13
2 files changed, 36 insertions, 5 deletions
diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml
index 51e90228b22..f8f449ce4bd 100644
--- a/doc/src/sgml/ddl.sgml
+++ b/doc/src/sgml/ddl.sgml
@@ -3963,6 +3963,11 @@ ALTER TABLE measurement ATTACH PARTITION measurement_y2008m02
</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
be attached that matches the expected partition constraint, as
@@ -3970,10 +3975,27 @@ ALTER TABLE measurement ATTACH PARTITION measurement_y2008m02
which is otherwise needed to validate the implicit
partition constraint. Without the <literal>CHECK</literal> constraint,
the table will be scanned to validate the partition constraint while
- holding both an <literal>ACCESS EXCLUSIVE</literal> lock on that partition
- and a <literal>SHARE UPDATE EXCLUSIVE</literal> lock on the parent table.
+ holding an <literal>ACCESS EXCLUSIVE</literal> lock on that partition.
It is recommended to drop the now-redundant <literal>CHECK</literal>
- constraint after <command>ATTACH PARTITION</command> is finished.
+ constraint after the <command>ATTACH PARTITION</command> is complete. If
+ the table being attached is itself a partitioned table then each of its
+ sub-partitions will be recursively locked and scanned until either a
+ suitable <literal>CHECK</literal> constraint is encountered or the leaf
+ partitions are reached.
+ </para>
+
+ <para>
+ Similarly, if the partitioned table has a <literal>DEFAULT</literal>
+ partition, it is recommended to create a <literal>CHECK</literal>
+ constraint which excludes the to-be-attached partition's constraint. If
+ this is not done then the <literal>DEFAULT</literal> partition will be
+ scanned to verify that it contains no records which should be located in
+ the partition being attached. This operation will be performed whilst
+ holding an <literal>ACCESS EXCLUSIVE</literal> lock on the <literal>
+ DEFAULT</literal> partition. If the <literal>DEFAULT</literal> partition
+ is itself a partitioned table then each of its partitions will be
+ recursively checked in the same way as the table being attached, as
+ mentioned above.
</para>
<para>
diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml
index ea27df25698..cdb82ae888b 100644
--- a/doc/src/sgml/ref/alter_table.sgml
+++ b/doc/src/sgml/ref/alter_table.sgml
@@ -913,8 +913,17 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
<para>
Attaching a partition acquires a
<literal>SHARE UPDATE EXCLUSIVE</literal> lock on the parent table,
- in addition to <literal>ACCESS EXCLUSIVE</literal> locks on the table
- to be attached and on the default partition (if any).
+ in addition to the <literal>ACCESS EXCLUSIVE</literal> locks on the table
+ being attached and on the default partition (if any).
+ </para>
+
+ <para>
+ Further locks must also be held on all sub-partitions if the table being
+ attached is itself a partitioned table. Likewise if the default
+ partition is itself a partitioned table. The locking of the
+ sub-partitions can be avoided by adding a <literal>CHECK</literal>
+ constraint as described in
+ <xref linkend="ddl-partitioning-declarative-maintenance"/>.
</para>
</listitem>
</varlistentry>