On Wed, Nov 4, 2026 at 6:31 AM Peter Smith <[email protected]> wrote:
>
> (This was discovered while investigating a similar topic [1]).
>
> AFAIK generated columns should not normally be logically replicated:
> - VIRTUAL gencols, never
> - STORED gencols, according to the 'publish_generated_columns' parameter
>
> So, why does the subscription tablesync complain below that the column
> name "a" does not exist, given that it will not be replicated anyway?
>
> For example, at the publisher-side
>
> test_pub=# CREATE TABLE T_GENCOLS(a int generated always as (99) VIRTUAL);
> CREATE TABLE
> test_pub=# insert into t_gencols default values;
> INSERT 0 1
> test_pub=# insert into t_gencols default values;
> INSERT 0 1
> test_pub=# insert into t_gencols default values;
> INSERT 0 1
> test_pub=# select * from t_gencols;
>  a
> ----
>  99
>  99
>  99
> (3 rows)
> test_pub=# CREATE PUBLICATION pub1 FOR TABLE t_gencols;
> CREATE PUBLICATION
>
> Then, on the subscriber-side
>
> test_sub=# create table t_gencols(local_col text default
> 'subscriber-gencol-default');
> CREATE TABLE
> test_sub=# create subscription sub1 connection 'dbname=test_pub'
> publication pub1;
> NOTICE:  created replication slot "sub1" on publisher
> CREATE SUBSCRIPTION
> test_sub=#
> 2026-11-04 09:57:53.983 AEDT [345164] LOG:  logical replication apply
> worker for subscription "sub1" has started
> 2026-11-04 09:57:53.995 AEDT [345166] LOG:  logical replication table
> synchronization worker for subscription "sub1", table "t_gencols" has
> started
> 2026-11-04 09:57:54.059 AEDT [345166] ERROR:  logical replication
> target relation "public.t_gencols" is missing replicated column: "a"
>
> ~~~
>
> OTOH, when the subscription is created with parameter copy_data=false
> then it works as expected for normal replication, therefore I suspect
> this may be a tablesync-only problem, probably in function
> fetch_remote_table_info() although I have not yet debugged/proved
> that.
>
> Thoughts?

+1, a genuine problem in tablesync, should be addressed.  It appears
to be a corner case where the table has no publishable columns at all.
I verified that tablesync works correctly when the table also has
at-least one ordinary column (not generated one).

thanks
Shveta


Reply via email to