diff options
author | Teodor Sigaev | 2018-04-05 14:56:00 +0000 |
---|---|---|
committer | Teodor Sigaev | 2018-04-05 14:56:00 +0000 |
commit | 0a64b45152b593c5eb95f2e88fbce7fbfe84ae7b (patch) | |
tree | f28cd056f3df8f09549dedb400eb890d333f8100 /contrib/pageinspect/btreefuncs.c | |
parent | 01b88b4df5e2df0365cceaf79a039214d9f05273 (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.c | 17 |
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); |