On Thu, 13 Feb 2025 at 20:12, vignesh C <vignes...@gmail.com> wrote:
>
> On Thu, 13 Feb 2025 at 15:50, Shlok Kyal <shlok.kyal....@gmail.com> wrote:
> >
> >
> > I have fixed the issue. Attached the updated v6 patch.
>
> There is another concurrency issue:
> In case of create publication for all tables with
> publish_via_partition_root we will call check_foreign_tables:
> @@ -876,6 +876,10 @@ CreatePublication(ParseState *pstate,
> CreatePublicationStmt *stmt)
>         /* Associate objects with the publication. */
>         if (stmt->for_all_tables)
>         {
> +               /* Check if any foreign table is a part of partitioned table 
> */
> +               if (publish_via_partition_root)
> +                       check_foreign_tables(stmt->pubname);
>
> At the time of check in check_foreign_tables, there are no foreign
> tables so this check will be successful:
> +check_foreign_tables_in_schema(Oid schemaid, char *pubname)
> +{
> +       Relation        classRel;
> +       ScanKeyData key[2];
> +       TableScanDesc scan;
> +       HeapTuple       tuple;
> +
> +       classRel = table_open(RelationRelationId, AccessShareLock);
> +
> +       ScanKeyInit(&key[0],
> +                               Anum_pg_class_relnamespace,
> +                               BTEqualStrategyNumber, F_OIDEQ,
> +                               schemaid);
> +       ScanKeyInit(&key[1],
> +                               Anum_pg_class_relkind,
> +                               BTEqualStrategyNumber, F_CHAREQ,
> +                               CharGetDatum(RELKIND_PARTITIONED_TABLE));
> +
> +       scan = table_beginscan_catalog(classRel, 2, key);
> +       while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
>
> Now immediately after execution of this, create a foreign table:
> postgres=# CREATE FOREIGN TABLE part22 PARTITION OF part2 FOR VALUES
> FROM (10) TO (15) SERVER fdw;
> CREATE FOREIGN TABLE
>
> And then continue execution of create publication, it will also be successful:
> postgres=# create publication pub1 for all tables with (
> publish_via_partition_root =true);
> CREATE PUBLICATION
>
> One probable way to fix this is to do the search similar to
> check_foreign_tables_in_schema where we can skip including schemaid
> key for all tables.
>
> How about something like the attached patch.
>

Hi Vignesh,

I have used the changes suggested by you. Also I have updated the
comments and the function name.

Thanks and Regards,
Shlok Kyal

Attachment: v7-0001-Restrict-publishing-of-partitioned-table-with-for.patch
Description: Binary data

Reply via email to