From c5c0c5d3b5fc43760da0fa4ed9466077af573056 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 8 Aug 2023 16:22:18 +0900 Subject: [PATCH v1 2/3] Force a FATAL when facing OOM in WAL replay --- src/backend/access/transam/xlogrecovery.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 06b00c7c46..e3b156ec15 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -3098,9 +3098,15 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode, * failed - in that case we already logged something. In * StandbyMode that only happens if we have been triggered, so we * shouldn't loop anymore in that case. + * + * If we failed because of an out-of-memory problem, just give up + * and retry recovery later. It may be posible that the WAL record + * to decode required a larger memory allocation than what the host + * can offer. */ if (errormsg) - ereport(emode_for_corrupt_record(emode, xlogreader->EndRecPtr), + ereport(errorcode == XLOG_READER_OOM ? + FATAL : emode_for_corrupt_record(emode, xlogreader->EndRecPtr), (errmsg_internal("%s", errormsg) /* already translated */ )); } -- 2.40.1