Thread

  1. Re: Support EXCEPT for ALL SEQUENCES publications

    Shlok Kyal <shlok.kyal.oss@gmail.com> — 2026-05-29T11:59:11Z

    Hi Zsolt,
    Thanks for reviewing the patch.
    
    On Thu, 28 May 2026 at 03:22, Zsolt Parragi <zsolt.parragi@percona.com> wrote:
    >
    > Hello!
    >
    > +                                       if (footers[0] == NULL)
    > +                                               footers[0] = pg_strdup(tmpbuf.data);
    > +                                       else if (footers[1] == NULL)
    > +                                               footers[1] = pg_strdup(tmpbuf.data);
    > +                                       else
    > +                                               footers[2] = pg_strdup(tmpbuf.data);
    > +                                       resetPQExpBuffer(&tmpbuf);
    >
    > Shouldn't the matching free calls also updated, this now leaks footers[2]?
    >
    Yes, correct. Made the change for the same.
    
    > +                                                         "\n AND NOT EXISTS (\n"
    > +                                                         "     SELECT 1\n"
    > +                                                         "     FROM pg_catalog.pg_publication_rel pr\n"
    > +                                                         "     WHERE pr.prpubid = p.oid AND\n"
    > +                                                         "     pr.prrelid = '%s')"
    >
    > Isn't a pr.prexcept check missing from this? It is included in other queries.
    >
    pg_publication_rel has an entry for table/sequence if we specifically
    include/exclude it in a publication.
    So, we can say, pg_publication_rel contains an entry for a
    Table/Sequence for a ALL TABLES/ ALL SEQUENCE publication, only if it
    is specified in the EXCEPT clause.
    So, the above query will give the expected results even if we donot
    use the ' pr.prexcept' flag.
    
    For the case: _("Get publications that publish this table"))
    Here as well we use a similar query without prexcept:
    "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
                                          "     AND NOT EXISTS (\n"
                                          "     SELECT 1\n"
                                          "     FROM
    pg_catalog.pg_publication_rel pr\n"
                                          "     WHERE pr.prpubid = p.oid AND\n"
                                          "     (pr.prrelid = '%s' OR
    pr.prrelid = pg_catalog.pg_partition_root('%s')))\n"
                                          "ORDER BY 1;",
    
    
    > -               /* EXCEPT clause is not supported with ALTER PUBLICATION */
    > -               Assert(exceptseqs == NIL);
    > -
    >
    > Would it be worth it to keep a more restricted assert, saying that
    > EXCEPT clause is only supported for ALTER PUBLICATION ... SET?
    >
    >
    Added the Assert in 0002 patch.
    
    I have addressed the comments and attached the v8 patch.
    
    Thanks,
    Shlok Kyal