diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 9eb5cd5ee4..49f9c7d3a5 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -451,11 +451,6 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) XLogRecord *record; char *err = NULL; - /* - * If the caller requires that interrupts be checked, the read_page - * callback should do so, as those will often wait. - */ - /* the read_page callback waits for new WAL */ record = XLogReadRecord(ctx->reader, startptr, &err); if (err) @@ -470,6 +465,8 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx) /* only continue till we found a consistent spot */ if (DecodingContextReady(ctx)) break; + + CHECK_FOR_INTERRUPTS(); } ctx->slot->data.confirmed_flush = ctx->reader->EndRecPtr; diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c index 2da6bb10b2..a3a58e6a49 100644 --- a/src/backend/replication/logical/logicalfuncs.c +++ b/src/backend/replication/logical/logicalfuncs.c @@ -438,6 +438,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin if (upto_nchanges != 0 && upto_nchanges <= p->returned_rows) break; + CHECK_FOR_INTERRUPTS(); } } PG_CATCH();