On Tuesday, April 22, 2025, Peter Smith <smithpb2...@gmail.com> wrote:

> Hi,
>
> While re-reading documentation about logical replication of generated
> columns, I came across this paragraph in the CREATE PUBLICATION ...
> FOR TABLE description [1].
>
> ----
> When a column list is specified, only the named columns are
> replicated. The column list can contain stored generated columns as
> well. If no column list is specified, all table columns (except
> generated columns) are replicated through this publication, including
> any columns added later. It has no effect on TRUNCATE commands. See
> Section 29.5 for details about column lists.
> ----
>
> That "except generated columns" part is not strictly correct because
> it fails to account for the 'publish_generated_columns' parameter.
> I've suggested a more accurate description below.
>
>
> SUGGESTION
> ----
> When a column list is specified, only the named columns are
> replicated. Stored generated columns may be included in the list.
> Specifying a column list has no effect on TRUNCATE commands. See
> Section 29.5 for details about column lists. If no column list is
> specified, all table columns are replicated through this publication,
> including any columns added later. Generated columns are included in
> this case only if publish_generated_columns is set to stored.
> ----
>
> I've attached a patch to implement this suggested wording.
>
> Thoughts?
>
> ======
> [1] https://www.postgresql.org/docs/devel/sql-createpublication.html#SQL-
> CREATEPUBLICATION-PARAMS-FOR-TABLE
>

In the column list I would stick to mentioning what cannot be specified,
since it would be assumed by default that any column on the table is fair
game.  I believe that means not mentioning stored generated and instead
mentioning virtual generated.  It really seems odds mentioning stored
generated being allowed before mentioning when they are optional, default
excluded.

Alternative:

The optional column list may include any non-virtual columns of the table.
If omitted, tables publish all (including future) non-generated columns by
default, and may publish stored generated columns if the publication option
publish_generated_columns is set to stored.  See Section 29.5 for details
about column lists.


I don’t get why truncate is mentioned here.  I omitted it intentionally.

David J.

Reply via email to