From 422041542f313f23ca66cad26e9b2b99c4d1999a Mon Sep 17 00:00:00 2001 From: Alexander Korotkov Date: Mon, 8 Apr 2024 12:11:56 +0300 Subject: [PATCH] Fill CommonRdOptions with default values in extract_autovac_opts() Reported-by: Thomas Munro Reported-by: Pavel Borisov Discussion: https://postgr.es/m/CA%2BhUKGLZzLR50RBvuqOO3MZ%3DF54ETz-rTp1PDX9uDGP_GqyYqA%40mail.gmail.com --- src/backend/access/common/reloptions.c | 28 ++++++++++++++++++++++++++ src/backend/postmaster/autovacuum.c | 1 + src/backend/utils/cache/relcache.c | 21 +------------------ src/include/access/reloptions.h | 1 + 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index c1de092a42..24245f7172 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -2056,6 +2056,34 @@ view_reloptions(Datum reloptions, bool validate) tab, lengthof(tab)); } +/* + * Fill CommonRdOptions with the default values. + */ +void +fill_default_common_reloptions(CommonRdOptions *common) +{ + common->autovacuum.enabled = true; + common->autovacuum.vacuum_threshold = -1; + common->autovacuum.vacuum_ins_threshold = -2; + common->autovacuum.analyze_threshold = -1; + common->autovacuum.vacuum_cost_limit = -1; + common->autovacuum.freeze_min_age = -1; + common->autovacuum.freeze_max_age = -1; + common->autovacuum.freeze_table_age = -1; + common->autovacuum.multixact_freeze_min_age = -1; + common->autovacuum.multixact_freeze_max_age = -1; + common->autovacuum.multixact_freeze_table_age = -1; + common->autovacuum.log_min_duration = -1; + common->autovacuum.vacuum_cost_delay = -1; + common->autovacuum.vacuum_scale_factor = -1; + common->autovacuum.vacuum_ins_scale_factor = -1; + common->autovacuum.analyze_scale_factor = -1; + common->parallel_workers = -1; + common->user_catalog_table = false; + common->vacuum_index_cleanup = STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO; + common->vacuum_truncate = true; +} + /* * Parse options for heaps, views and toast tables. */ diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 7cb79ebced..170b973cc5 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -2681,6 +2681,7 @@ extract_autovac_opts(HeapTuple tup, TupleDesc pg_class_desc) ((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_MATVIEW || ((Form_pg_class) GETSTRUCT(tup))->relkind == RELKIND_TOASTVALUE); + fill_default_common_reloptions(&common); relopts = extractRelOptions(tup, pg_class_desc, GetTableAmRoutineByAmOid(((Form_pg_class) GETSTRUCT(tup))->relam), NULL, &common); diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index f6f60c21fa..8fa09a5d75 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -480,26 +480,7 @@ RelationParseRelOptions(Relation relation, HeapTuple tuple) { common = MemoryContextAlloc(CacheMemoryContext, sizeof(CommonRdOptions)); - common->autovacuum.enabled = true; - common->autovacuum.vacuum_threshold = -1; - common->autovacuum.vacuum_ins_threshold = -2; - common->autovacuum.analyze_threshold = -1; - common->autovacuum.vacuum_cost_limit = -1; - common->autovacuum.freeze_min_age = -1; - common->autovacuum.freeze_max_age = -1; - common->autovacuum.freeze_table_age = -1; - common->autovacuum.multixact_freeze_min_age = -1; - common->autovacuum.multixact_freeze_max_age = -1; - common->autovacuum.multixact_freeze_table_age = -1; - common->autovacuum.log_min_duration = -1; - common->autovacuum.vacuum_cost_delay = -1; - common->autovacuum.vacuum_scale_factor = -1; - common->autovacuum.vacuum_ins_scale_factor = -1; - common->autovacuum.analyze_scale_factor = -1; - common->parallel_workers = -1; - common->user_catalog_table = false; - common->vacuum_index_cleanup = STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO; - common->vacuum_truncate = true; + fill_default_common_reloptions(common); relation->rd_common_options = common; } else diff --git a/src/include/access/reloptions.h b/src/include/access/reloptions.h index 342b9cdd6e..a3560500f3 100644 --- a/src/include/access/reloptions.h +++ b/src/include/access/reloptions.h @@ -236,6 +236,7 @@ extern void *build_reloptions(Datum reloptions, bool validate, extern void *build_local_reloptions(local_relopts *relopts, Datum options, bool validate); +extern void fill_default_common_reloptions(CommonRdOptions *common); extern bytea *heap_reloptions(char relkind, Datum reloptions, CommonRdOptions *common, bool validate); extern bytea *view_reloptions(Datum reloptions, bool validate);