0001-Do-not-verify-unlogged-indexes-during-amcheck.patch
application/octet-stream
Filename: 0001-Do-not-verify-unlogged-indexes-during-amcheck.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Do not verify unlogged indexes during amcheck
| File | + | − |
|---|---|---|
| contrib/amcheck/verify_nbtree.c | 17 | 6 |
From 8e8eada51518ab4b77f1c99b8c691784fd938fd7 Mon Sep 17 00:00:00 2001
From: Andrey <amborodin@acm.org>
Date: Mon, 12 Aug 2019 14:37:40 +0500
Subject: [PATCH] Do not verify unlogged indexes during amcheck
On standby unlogged index may be absent and user gets error.
In this case we just emmit warning to user.
---
contrib/amcheck/verify_nbtree.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index a1438a2855..ef7e411cdb 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -119,7 +119,7 @@ PG_FUNCTION_INFO_V1(bt_index_parent_check);
static void bt_index_check_internal(Oid indrelid, bool parentcheck,
bool heapallindexed);
-static inline void btree_index_checkable(Relation rel);
+static inline bool btree_index_checkable(Relation rel);
static void bt_check_every_level(Relation rel, Relation heaprel,
bool readonly, bool heapallindexed);
static BtreeLevel bt_check_level_from_leftmost(BtreeCheckState *state,
@@ -248,10 +248,9 @@ bt_index_check_internal(Oid indrelid, bool parentcheck, bool heapallindexed)
RelationGetRelationName(indrel))));
/* Relation suitable for checking as B-Tree? */
- btree_index_checkable(indrel);
-
- /* Check index, possibly against table it is an index on */
- bt_check_every_level(indrel, heaprel, parentcheck, heapallindexed);
+ if (btree_index_checkable(indrel))
+ /* Check index, possibly against table it is an index on */
+ bt_check_every_level(indrel, heaprel, parentcheck, heapallindexed);
/*
* Release locks early. That's ok here because nothing in the called
@@ -271,7 +270,7 @@ bt_index_check_internal(Oid indrelid, bool parentcheck, bool heapallindexed)
* callable by non-superusers. If granted, it's useful to be able to check a
* whole cluster.
*/
-static inline void
+static inline bool
btree_index_checkable(Relation rel)
{
if (rel->rd_rel->relkind != RELKIND_INDEX ||
@@ -295,6 +294,18 @@ btree_index_checkable(Relation rel)
errmsg("cannot check index \"%s\"",
RelationGetRelationName(rel)),
errdetail("Index is not valid")));
+
+ if (!RelationNeedsWAL(rel) && RecoveryInProgress())
+ {
+ ereport(WARNING,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot check index \"%s\"",
+ RelationGetRelationName(rel)),
+ errdetail("Index is unlogged and recovery is in progress")));
+ return false;
+ }
+
+ return true;
}
/*
--
2.20.1