summaryrefslogtreecommitdiff
path: root/contrib/pageinspect/btreefuncs.c
diff options
context:
space:
mode:
authorTeodor Sigaev2018-04-05 14:56:00 +0000
committerTeodor Sigaev2018-04-05 14:56:00 +0000
commit0a64b45152b593c5eb95f2e88fbce7fbfe84ae7b (patch)
treef28cd056f3df8f09549dedb400eb890d333f8100 /contrib/pageinspect/btreefuncs.c
parent01b88b4df5e2df0365cceaf79a039214d9f05273 (diff)
Fix handling of non-upgraded B-tree metapages
857f9c36 bumps B-tree metapage version while upgrade is performed "on the fly" when needed. However, some asserts fired when old version metapage was cached to rel->rd_amcache. Despite new metadata fields are never used from rel->rd_amcache, that needs to be fixed. This patch introduces metadata upgrade during its caching, which fills unavailable fields with their default values. contrib/pageinspect is also patched to handle non-upgraded metapages in the same way. Author: Alexander Korotkov
Diffstat (limited to 'contrib/pageinspect/btreefuncs.c')
-rw-r--r--contrib/pageinspect/btreefuncs.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c
index 5133653791..558a8c41f4 100644
--- a/contrib/pageinspect/btreefuncs.c
+++ b/contrib/pageinspect/btreefuncs.c
@@ -555,8 +555,21 @@ bt_metap(PG_FUNCTION_ARGS)
values[j++] = psprintf("%d", metad->btm_level);
values[j++] = psprintf("%d", metad->btm_fastroot);
values[j++] = psprintf("%d", metad->btm_fastlevel);
- values[j++] = psprintf("%u", metad->btm_oldest_btpo_xact);
- values[j++] = psprintf("%lf", metad->btm_last_cleanup_num_heap_tuples);
+
+ /*
+ * Get values of extended metadata if available, use default values
+ * otherwise.
+ */
+ if (metad->btm_version == BTREE_VERSION)
+ {
+ values[j++] = psprintf("%u", metad->btm_oldest_btpo_xact);
+ values[j++] = psprintf("%lf", metad->btm_last_cleanup_num_heap_tuples);
+ }
+ else
+ {
+ values[j++] = "0";
+ values[j++] = "-1";
+ }
tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc),
values);