</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:
</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
</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>