diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 7574a628ef..579a510c51 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -328,6 +328,9 @@ contain_invalid_rfcolumn(Oid pubid, Relation relation, List *ancestors, * For a partition, if pubviaroot is true, find the topmost * ancestor that is published via this publication as we need to * use its row filter expression to filter the partition's changes. + * + * Note that even though the row filter used is for an ancestor, the + * Replica Identity used will be for the actual child table. */ if (pub->pubviaroot && relation->rd_rel->relispartition) { diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 4d0632fc86..b2c96e9244 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -1116,9 +1116,11 @@ pgoutput_row_filter(Relation relation, TupleTableSlot *old_slot, } /* - * For updates, if both the new tuple and old tuple are not null, then both - * of them need to be checked against the row filter. + * Both the old and new tuples must be valid only for updates and need to + * be checked against the row filter. */ + Assert(map_changetype_pubaction[*action] == PUBACTION_UPDATE); + tmp_new_slot = new_slot; slot_getallattrs(new_slot); slot_getallattrs(old_slot);