From a46bd4e2c4b6bdee1bea69438f8e6b5b7a7507e0 Mon Sep 17 00:00:00 2001 From: Hayato Kuroda Date: Wed, 7 Oct 2026 15:56:06 +0900 Subject: [PATCH 2/2] Preserve an error context before entering an apply loop --- src/backend/replication/logical/applyparallelworker.c | 3 ++- src/backend/replication/logical/worker.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c index 96bf499e49c..988615a6140 100644 --- a/src/backend/replication/logical/applyparallelworker.c +++ b/src/backend/replication/logical/applyparallelworker.c @@ -1047,7 +1047,8 @@ ProcessParallelApplyMessage(StringInfo msg) /* * Context beyond that should use the error context callbacks - * that were in effect in LogicalRepApplyLoop(). + * that were in effect before LogicalRepApplyLoop() installed + * its apply error callback. */ error_context_stack = apply_error_context_stack; diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 37b37500213..3d331c356a6 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -4088,7 +4088,7 @@ LogicalRepApplyLoop(XLogRecPtr last_received) errcallback.callback = apply_error_callback; errcallback.previous = error_context_stack; error_context_stack = &errcallback; - apply_error_context_stack = error_context_stack; + apply_error_context_stack = errcallback.previous; /* This outer loop iterates once per wait. */ for (;;) -- 2.52.0