On Wed, Sep 29, 2021 12:34 PM Amit Kapila <amit.kapil...@gmail.com> > On Wed, Sep 29, 2021 at 9:07 AM houzj.f...@fujitsu.com > <houzj.f...@fujitsu.com> wrote: > > > > On Tues, Sep 28, 2021 10:46 PM vignesh C <vignes...@gmail.com> wrote: > > > Attached v34 patch has the changes for the same. > > > > 3) > > + /* > > + * Check if setting the relation to a different schema will result > > in the > > + * publication having schema and same schema's table in the > publication. > > + */ > > + if (stmt->objectType == OBJECT_TABLE) > > + { > > + ListCell *lc; > > + List *schemaPubids = > GetSchemaPublications(nspOid); > > + foreach(lc, schemaPubids) > > + { > > + Oid pubid = lfirst_oid(lc); > > + if (list_member_oid(GetPublicationRelations(pubid, > PUBLICATION_PART_ALL), > > + relid)) > > + ereport(ERROR, > > > > How about we check this case like the following ? > > > > List *schemaPubids = GetSchemaPublications(nspOid); > > List *relPubids = GetRelationPublications(RelationGetRelid(rel)); > > if (list_intersection(schemaPubids, relPubids)) > > ereport(ERROR, ... > > > > Won't this will allow changing one of the partitions for which only > partitioned > table is part of the target schema?
I think it still disallow changing partition's schema to the published one. I tested with the following SQLs. ----- create schema sch1; create schema sch2; create schema sch3; create table sch1.tbl1 (a int) partition by range ( a ); create table sch2.tbl1_part1 partition of sch1.tbl1 for values from (1) to (101); create table sch3.tbl1_part2 partition of sch1.tbl1 for values from (101) to (200); create publication pub for ALL TABLES IN schema sch1, TABLE sch2.tbl1_part1; alter table sch2.tbl1_part1 set schema sch1; ---* It will report an error here * ----- Did I miss something ? Best regards, Hou zj