aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree/nbtpage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/nbtree/nbtpage.c')
-rw-r--r--src/backend/access/nbtree/nbtpage.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c
index 58f47e7b646..65354e6d28f 100644
--- a/src/backend/access/nbtree/nbtpage.c
+++ b/src/backend/access/nbtree/nbtpage.c
@@ -677,6 +677,7 @@ bool
_bt_page_recyclable(Page page)
{
BTPageOpaque opaque;
+ TransactionId cutoff;
/*
* It's possible to find an all-zeroes page in an index --- for example, a
@@ -689,11 +690,18 @@ _bt_page_recyclable(Page page)
/*
* Otherwise, recycle if deleted and too old to have any processes
- * interested in it.
+ * interested in it. If we are generating records for Hot Standby
+ * defer page recycling until RecentGlobalXmin to respect user
+ * controls specified by vacuum_defer_cleanup_age or hot_standby_feedback.
*/
+ if (XLogStandbyInfoActive())
+ cutoff = RecentGlobalXmin;
+ else
+ cutoff = RecentXmin;
+
opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (P_ISDELETED(opaque) &&
- TransactionIdPrecedesOrEquals(opaque->btpo.xact, RecentXmin))
+ TransactionIdPrecedesOrEquals(opaque->btpo.xact, cutoff))
return true;
return false;
}