From: Amit Kapila Date: Mon, 8 Jun 2026 05:29:05 +0000 (+0530) Subject: Fix publisher retain_dead_tuples check when also changing origin. X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=75dcc63dac0ef183774ec22a6557174ee36db601;p=thirdparty%2Fpostgresql.git Fix publisher retain_dead_tuples check when also changing origin. In AlterSubscription(), when the SET clause includes both retain_dead_tuples and origin options, the origin branch was using assignment (=) rather than bitwise-or assignment (|=) when setting check_pub_rdt. This meant that if retain_dead_tuples had already set the flag to true in the same command, the origin branch would silently overwrite it. As a result, the publisher-side retain_dead_tuples check could be incorrectly skipped. Fix by changing the assignment to |= so that the flag accumulates across both option branches within the same ALTER SUBSCRIPTION command. Author: SATYANARAYANA NARLAPURAM Reviewed-by: Zhijie Hou Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/CAHg+QDfe7WPOhVGKzv83ZB+BmXM88r=KPQn1sa_ZXMMChcNo=A@mail.gmail.com --- diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 523959ba0ce..fd026b304c2 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -1748,9 +1748,11 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt, /* * Check if changes from different origins may be received * from the publisher when the origin is changed to ANY - * and retain_dead_tuples is enabled. + * and retain_dead_tuples is enabled. Use |= so that we + * don't clear the flag already set when + * retain_dead_tuples was changed in the same command. */ - check_pub_rdt = retain_dead_tuples && + check_pub_rdt |= retain_dead_tuples && pg_strcasecmp(opts.origin, LOGICALREP_ORIGIN_ANY) == 0; origin = opts.origin;