On Thu, Apr 15, 2021 at 08:47:26PM +0200, Matthias van de Meent wrote:
> I recently noticed that ATTACH PARTITION also recursively locks the
> default partition with ACCESS EXCLUSIVE mode when its constraints do
> not explicitly exclude the to-be-attached partition, which I couldn't
> find documented (has been there since PG10 I believe).

I'm not sure it's what you're looking for, but maybe you saw:
https://www.postgresql.org/docs/12/sql-altertable.html
|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.

And since 2a4d96ebb:
|Attaching a partition acquires a SHARE UPDATE EXCLUSIVE lock on the parent 
table, in addition to ACCESS EXCLUSIVE locks on the table to be attached and on 
the default partition (if any).

>From your patch:

> +    <para>
> +     Similarly, if you have a default partition on the parent table, it is
> +     recommended to create a <literal>CHECK</literal> constraint that 
> excludes
> +     the to be attached partition constraint. Here, too, without the
> +     <literal>CHECK</literal> constraint, this table will be scanned to
> +     validate that the updated default partition constraints while holding
> +     an <literal>ACCESS EXCLUSIVE</literal> lock on the default partition.
> +    </para>

The AEL is acquired in any case, right ?

I think whatever we say here needs to be crystal clear that only the scan can
be skipped.

I suggest that maybe the existing paragraph in alter_table.sgml could maybe say
that an exclusive lock is held, maybe like.

|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.
|The scan of the default partition occurs while it is exclusively locked.

-- 
Justin


Reply via email to