On Tuesday, June 1, 2021 4:33 PM Peter Smith <smithpb2250@gmail.com>
> To: Andres Freund <andres@anarazel.de>
> Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>; Amit Kapila
> <amit.kapila16@gmail.com>; Markus Wanner
> <markus.wanner@enterprisedb.com>
> Subject: Re: locking [user] catalog tables vs 2pc vs logical rep
>
> Hi.
>
> The attached PG docs patch about catalog deadlocks was previously
> implemented in another thread [1], but it seems more relevant to this one.
>
> PSA.
Thank you for providing the patch.
I have updated your patch to include some other viewpoints.
For example, CLUSTER command scenario
that also causes hang of PREPARE in synchronous mode.
We get this deadlock, using the 2PC patch-set.
FYI, the scenario is
(1) create a table with a trigger
(2) create pub and sub in synchronous mode
(3) then, execute CLUSTER pg_trigger USING pg_trigger_oid_index,
and do some operations (e.g. INSERT) on the trigger-attached table and PREPARE
The mechanism of this is
walsender tries to take a lock on pg_trigger if the table has a trigger,
but, pg_trigger is already locked by the CLUSTER command, which leads to the deadlock.
Then, this scenario requires some operations on the table which has trigger
because it invokes the walsender to take the lock described above.
I also included the description about TRUNCATE on user_catalog_table
in the patch. Please have a look at this patch.
Best Regards,
Takamichi Osumi