Re: Logical Replication of sequences - Mailing list pgsql-hackers

From vignesh C
Subject Re: Logical Replication of sequences
Date
Msg-id CALDaNm04S4xW_5G9hLcFKCQ4eKnu2XfqOEovZC15nWcM+Tr81w@mail.gmail.com
Whole thread Raw
In response to Re: Logical Replication of sequences  (Peter Smith <smithpb2250@gmail.com>)
List pgsql-hackers
On Mon, 14 Apr 2025 at 08:26, Peter Smith <smithpb2250@gmail.com> wrote:
>
> Hi Vignesh,
>
> Some review comments for patch v20250325-0002
>
> ======
> Commit message
>
> 1.
> Furthermore, enhancements to psql commands (\d and \dRp) now allow for better
> display of publications containing specific sequences or sequences included
> in a publication.
>
> ~
>
> That doesn't seem as clear as it might be. Also, IIUC the "sequences
> included in a publication" is not actually implemented yet -- there is
> only the "all sequences" flag.
>
> SUGGESTION
> Furthermore, enhancements to psql commands now display which
> publications contain the specified sequence (\d command), and if a
> specified publication includes all sequences (\dRp command)

Modified

> ======
> doc/src/sgml/ref/create_publication.sgml
>
> 2.
>    <para>
>     To add a table to a publication, the invoking user must have ownership
> -   rights on the table.  The <command>FOR ALL TABLES</command> and
> -   <command>FOR TABLES IN SCHEMA</command> clauses require the invoking
> +   rights on the table.  The <command>FOR TABLES IN SCHEMA</command>,
> +   <command>FOR ALL TABLES</command> and
> +   <command>FOR ALL SEQUENCES</command> clauses require the invoking
>     user to be a superuser.
>
> IMO these should all be using <literal> SGML markup same as elsewhere
> on this page, not <command> markup.

Modified

> ======
> src/backend/commands/publicationcmds.c
>
> 3.
> if (!superuser_arg(newOwnerId))
> {
>   if (form->puballtables)
>     ereport(ERROR,
>             errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
>             errmsg("permission denied to change owner of publication \"%s\"",
>                    NameStr(form->pubname)),
>             errhint("The owner of a FOR ALL TABLES publication must be
> a superuser."));
>   if (form->puballsequences)
>     ereport(ERROR,
>             errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
>             errmsg("permission denied to change owner of publication \"%s\"",
>                    NameStr(form->pubname)),
>             errhint("The owner of a FOR ALL SEQUENCES publication must
> be a superuser."));
>   if (is_schema_publication(form->oid))
>     ereport(ERROR,
>             errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
>             errmsg("permission denied to change owner of publication \"%s\"",
>                    NameStr(form->pubname)),
>             errhint("The owner of a FOR TABLES IN SCHEMA publication
> must be a superuser."));
> }
>
> I wondered if there's too much duplicated code here. Maybe it's better
> to share a common ereport?
>
> SUGGESTION
>
> if (!superuser_arg(newOwnerId))
> {
>   char *hint_msg = NULL;
>
>   if (form->puballtables)
>     hint_msg = _("The owner of a FOR ALL TABLES publication must be a
> superuser.");
>   else if (form->puballsequences)
>     hint_msg = _("The owner of a FOR ALL SEQUENCES publication must be
> a superuser.");
>   else if (is_schema_publication(form->oid))
>     hint_msg = _("The owner of a FOR TABLES IN SCHEMA publication must
> be a superuser.");
>   if (hint_msg)
>     ereport(ERROR,
>             errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
>             errmsg("permission denied to change owner of publication \"%s\"",
>                    NameStr(form->pubname)),
>             errhint(hint_msg));
> }

I felt the existing code is ok in this case. It will be easier to
review if the error hint is along with ereport in this case.

> ======
> src/bin/psql/describe.c
>
> describeOneTableDetails:
>
> 4.
> + res = PSQLexec(buf.data);
> + if (!res)
> + goto error_return;
> +
> + numrows = PQntuples(res);
> +
>
> Isn't this same code already done a few lines above in the same
> function? Maybe I misread something.

Modified

> ======
> src/test/regress/sql/publication.sql
>
> 5.
> +-- check that describe sequence lists all publications the sequence belongs to
>
> Might be clearer to say:  "lists both" instead of "lists all"

Modified

Regarding comment at [1]. On further thinking I have removed that test
as one test is enough for that change, so the comment handling is no
more required.
Regarding comment at [2]. The attached patch has the rebased changes too.

The attached v20250414 version patch has the changes for the same.

[1] - https://www.postgresql.org/message-id/CAHut%2BPsgZkEegDzhJ2%3DDwDkrks6g6aQ6LX1-M%2BXBBt4PP-MX3g%40mail.gmail.com
[2] - https://www.postgresql.org/message-id/CAHut%2BPv5XMnX%2BQSSDhL5eqXV%3Dkp22jyYOgFx_u7kSMhwvktvrg%40mail.gmail.com

Regards,
Vignesh

Attachment

pgsql-hackers by date:

Previous
From: Pavel Luzanov
Date:
Subject: Re: Adding error messages to a few slash commands
Next
From: Andrey Borodin
Date:
Subject: Re: rounding_up