> On Fri, Feb 15, 2019 at 10:02 PM Alvaro Herrera <alvhe...@2ndquadrant.com> 
> wrote:
>
> On 2019-Feb-07, Dmitry Dolgov wrote:
>
> > Could there be a race condition somewhere? The idea and the code looks
> > reasonable, but when I'm testing ALTER TABLE ... REPLICA IDENTITY with this
> > patch and concurrent partition creation, I've got the following error on 
> > ATTACH
> > PARTITION:
> >
> > ERROR:  42P17: replica index does not exist in partition "test373"
> > LOCATION:  MatchReplicaIdentity, tablecmds.c:15018
> >
> > This error seems unstable, other time I've got a deadlock. And I don't 
> > observe
> > this behaviour on the master.
>
> Can you share your reproducer?

Sure, I was running concurrently the attached script, that creates a chain of
nested partitions test1,test2,..., and in a separate session:

    alter table test1 replica identity full;

Checking this time, I've got from the script:

    ERROR:  40P01: deadlock detected
    DETAIL:  Process 10547 waits for AccessShareLock on relation 30449
of database
    29898; blocked by process 9714.
    Process 9714 waits for AccessExclusiveLock on relation 30454 of
database 29898;
    blocked by process 10547.
    HINT:  See server log for query details.
    LOCATION:  DeadLockReport, deadlock.c:1140
    Time: 1001.917 ms (00:01.002)
set -ex

psql -c "create table test1(id int primary key) partition by range(id);";

for idx in $(seq 2 1000);
do
    psql -c "create table test$idx(id int primary key) partition by range(id);"
    psql -c "alter table test$((idx - 1)) attach partition test$idx for values from ($idx) to (1000000000);"
done;

Reply via email to