From 0e26a8f6b54121432f2b5ef78764c8586521c766 Mon Sep 17 00:00:00 2001 From: Melanie Plageman Date: Wed, 11 Mar 2026 13:57:13 -0400 Subject: [PATCH v3] Avoid WAL-flush checks for unlogged buffers in GetVictimBuffer() GetVictimBuffer() rejects a victim buffer if it is from a bulkread strategy ring and reusing it would require flushing WAL. Unlogged table buffers can have fake LSNs (e.g. unlogged GiST pages) and calling XLogNeedsFlush() on a fake LSN is meaningless. This is a bit of future-proofing because currently the bulkread strategy is not used for relations with fake LSNs. Author: Melanie Plageman Reported-by: Andres Freund Reviewed-by: Andres Freund Earlier version reviewed-by: Chao Li Discussion: https://postgr.es/m/flat/fmkqmyeyy7bdpvcgkheb6yaqewemkik3ls6aaveyi5ibmvtxnd%40nu2kvy5rq3a6 --- src/backend/storage/buffer/bufmgr.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 0546ee0193c..26b195b5359 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -2527,8 +2527,9 @@ again: { XLogRecPtr lsn = BufferGetLSN(buf_hdr); - if (XLogNeedsFlush(lsn) - && StrategyRejectBuffer(strategy, buf_hdr, from_ring)) + if (buf_state & BM_PERMANENT && + XLogNeedsFlush(lsn) && + StrategyRejectBuffer(strategy, buf_hdr, from_ring)) { LockBuffer(buf, BUFFER_LOCK_UNLOCK); UnpinBuffer(buf_hdr); -- 2.43.0