On Fri, Sep 17, 2021 at 5:40 PM vignesh C <vignes...@gmail.com> wrote: > > On Thu, Sep 16, 2021 at 9:54 AM Amit Kapila <amit.kapil...@gmail.com> wrote: > > > > I think there is one more similar locking problem. > > AlterPublicationSchemas() > > { > > .. > > + if (stmt->action == DEFELEM_ADD) > > + { > > + List *rels; > > + > > + rels = GetPublicationRelations(pubform->oid, PUBLICATION_PART_ROOT); > > + RelSchemaIsMemberOfSchemaList(rels, schemaidlist, true); > > ... > > ... > > } > > > > Here, we don't have a lock on the relation. So, what if the relation > > is concurrently dropped after you get the rel list by > > GetPublicationRelations? > > This works fine without locking even after concurrent drop, I felt > this works because of MVCC. >
Can you share the exact scenario you have tested? I think here it can give a wrong error because it might access invalid cache entry, so I think a lock is required here. Also, as said before, this might help to make the rel list consistent in function CheckObjSchemaNotAlreadyInPublication(). -- With Regards, Amit Kapila.