On Tue, 18 Feb 2025 at 15:59, Shlok Kyal <shlok.kyal....@gmail.com> wrote: > > On Mon, 17 Feb 2025 at 20:13, vignesh C <vignes...@gmail.com> wrote: > > > > On Fri, 14 Feb 2025 at 12:59, Shlok Kyal <shlok.kyal....@gmail.com> wrote: > > > > > > I have used the changes suggested by you. Also I have updated the > > > comments and the function name. > > > > There is another concurrency issue possible: > > +/* Check if a partitioned table has a foreign partition */ > > +bool > > +check_partrel_has_foreign_table(Form_pg_class relform) > > +{ > > + bool has_foreign_tbl = false; > > + > > + if (relform->relkind == RELKIND_PARTITIONED_TABLE) > > + { > > + List *relids = NIL; > > + > > + relids = find_all_inheritors(relform->oid, NoLock, NULL); > > > > Create a publication with publish_via_partition_root as true, hold the > > execution after check_partrel_has_foreign_table execution finishes. > > Then parallely execute the following: > > CREATE TABLE t1(id int) PARTITION BY RANGE(id); > > CREATE TABLE part1 PARTITION OF t1 FOR VALUES FROM (0) TO (5); > > CREATE TABLE part2 PARTITION OF t1 FOR VALUES FROM (5) TO (15) > > PARTITION BY RANGE(id); > > CREATE FOREIGN TABLE part2_1 PARTITION OF part2 FOR VALUES FROM (10) > > TO (15) SERVER fdw > > > > Now both the partitioned table having foreign table and a publication > > will be created. > > > > Hi Vignesh, > > I have addressed the above issue. If we take a ShareLock on the > pg_class, we won't be able to create table concurrently, which may > address the issue. Thoughts? > I have attached the v8 patch here.
Since pg_class is a very common table it is not a good idea to take ShareLock on it. Will it be possible to use pg_partitioned_table table instead? Regards, Vignesh