From: Fujii Masao Date: Thu, 25 Mar 2021 02:23:30 +0000 (+0900) Subject: Fix bug in WAL replay of COMMIT_TS_SETTS record. X-Git-Tag: REL9_6_22~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c29bab799c82c3640ec93cf14d0b4f174ae33fe0;p=thirdparty%2Fpostgresql.git Fix bug in WAL replay of COMMIT_TS_SETTS record. Previously the WAL replay of COMMIT_TS_SETTS record called TransactionTreeSetCommitTsData() with the argument write_xlog=true, which generated and wrote new COMMIT_TS_SETTS record. This should not be acceptable because it's during recovery. This commit fixes the WAL replay of COMMIT_TS_SETTS record so that it calls TransactionTreeSetCommitTsData() with write_xlog=false and doesn't generate new WAL during recovery. Back-patch to all supported branches. Reported-by: lx zou Author: Fujii Masao Reviewed-by: Alvaro Herrera Discussion: https://postgr.es/m/16931-620d0f2fdc6108f1@postgresql.org --- diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c index 8eea32c6efc..8bc67ffb16c 100644 --- a/src/backend/access/transam/commit_ts.c +++ b/src/backend/access/transam/commit_ts.c @@ -1012,7 +1012,7 @@ commit_ts_redo(XLogReaderState *record) subxids = NULL; TransactionTreeSetCommitTsData(setts->mainxid, nsubxids, subxids, - setts->timestamp, setts->nodeid, true); + setts->timestamp, setts->nodeid, false); if (subxids) pfree(subxids); }