0002-call-index_insert_cleanup-repeatedly.patch
text/x-patch
Filename: 0002-call-index_insert_cleanup-repeatedly.patch
Type: text/x-patch
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch 0002
Subject: call index_insert_cleanup repeatedly
| File | + | − |
|---|---|---|
| src/backend/access/heap/heapam_handler.c | 3 | 0 |
| src/backend/access/index/indexam.c | 10 | 1 |
| src/backend/catalog/index.c | 0 | 2 |
From 0c04b53573cf164c5a0108d909f05ffcbae4e72d Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Tue, 12 Dec 2023 12:24:05 +0100
Subject: [PATCH 2/2] call index_insert_cleanup repeatedly
---
src/backend/access/heap/heapam_handler.c | 3 +++
src/backend/access/index/indexam.c | 11 ++++++++++-
src/backend/catalog/index.c | 2 --
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c
index 7c28dafb728..5db0cf1dffa 100644
--- a/src/backend/access/heap/heapam_handler.c
+++ b/src/backend/access/heap/heapam_handler.c
@@ -1976,6 +1976,9 @@ heapam_index_validate_scan(Relation heapRelation,
/* These may have been pointing to the now-gone estate */
indexInfo->ii_ExpressionsState = NIL;
indexInfo->ii_PredicateState = NULL;
+
+ /* also make sure the IndexInfo cache gets freed */
+ index_insert_cleanup(indexRelation, indexInfo);
}
/*
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c
index f23e0199f08..515d7649c4d 100644
--- a/src/backend/access/index/indexam.c
+++ b/src/backend/access/index/indexam.c
@@ -207,8 +207,17 @@ index_insert_cleanup(Relation indexRelation,
RELATION_CHECKS;
Assert(indexInfo);
- if (indexRelation->rd_indam->aminsertcleanup && indexInfo->ii_AmCache)
+ if (!indexInfo->ii_AmCache)
+ return;
+
+ if (indexRelation->rd_indam->aminsertcleanup)
indexRelation->rd_indam->aminsertcleanup(indexInfo);
+
+ if (indexInfo->ii_AmCache)
+ {
+ pfree(indexInfo->ii_AmCache);
+ indexInfo->ii_AmCache = NULL;
+ }
}
/*
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 7a0e337a418..7b186c0220b 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -3414,8 +3414,6 @@ validate_index(Oid heapId, Oid indexId, Snapshot snapshot)
/* Done with tuplesort object */
tuplesort_end(state.tuplesort);
- index_insert_cleanup(indexRelation, indexInfo);
-
elog(DEBUG2,
"validate_index found %.0f heap tuples, %.0f index tuples; inserted %.0f missing tuples",
state.htups, state.itups, state.tups_inserted);
--
2.42.0