mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
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
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user