diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index d59a8f5032..17aeb80637 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1081,7 +1081,7 @@ pgoutput_column_list_init(PGOutputData *data, List *publications, int i; int nliveatts = 0; TupleDesc desc = RelationGetDescr(relation); - bool gencolpresent = false; + bool att_gen_present = false; pgoutput_ensure_entry_cxt(data, entry); @@ -1098,20 +1098,19 @@ pgoutput_column_list_init(PGOutputData *data, List *publications, if (att->attgenerated) { - if (bms_is_member(att->attnum, cols)) - gencolpresent = true; - - continue; + att_gen_present = true; + break; } nliveatts++; } /* - * If column list includes all the columns of the table - * and there are no generated columns, set it to NULL. + * Generated attributes are published only when they are + * present in the column list. Otherwise, a NULL column + * list means publish all columns. */ - if (bms_num_members(cols) == nliveatts && !gencolpresent) + if (!att_gen_present && bms_num_members(cols) == nliveatts) { bms_free(cols); cols = NULL;