diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 051a854..e86c239 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -126,6 +126,7 @@ bool enable_nestloop = true; bool enable_material = true; bool enable_mergejoin = true; bool enable_hashjoin = true; +bool enable_gather = true; bool enable_gathermerge = true; typedef struct @@ -361,7 +362,10 @@ cost_gather(GatherPath *path, PlannerInfo *root, else path->path.rows = rel->rows; - startup_cost = path->subpath->startup_cost; + if (!enable_gather) + startup_cost += disable_cost; + + startup_cost += path->subpath->startup_cost; run_cost = path->subpath->total_cost - path->subpath->startup_cost; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 246fea8..54372d5 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -902,6 +902,15 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { + {"enable_gather", PGC_USERSET, QUERY_TUNING_METHOD, + gettext_noop("Enables the planner's use of gather plans."), + NULL + }, + &enable_gather, + true, + NULL, NULL, NULL + }, + { {"enable_gathermerge", PGC_USERSET, QUERY_TUNING_METHOD, gettext_noop("Enables the planner's use of gather merge plans."), NULL diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index df5d2f3..e6567a1 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -290,6 +290,7 @@ # - Planner Method Configuration - #enable_bitmapscan = on +#enable_gather = on #enable_hashagg = on #enable_hashjoin = on #enable_indexscan = on diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index 63feba0..d756964 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -66,6 +66,7 @@ extern bool enable_nestloop; extern bool enable_material; extern bool enable_mergejoin; extern bool enable_hashjoin; +extern bool enable_gather; extern bool enable_gathermerge; extern int constraint_exclusion; diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out index 568b783..4995799 100644 --- a/src/test/regress/expected/sysviews.out +++ b/src/test/regress/expected/sysviews.out @@ -73,6 +73,7 @@ select name, setting from pg_settings where name like 'enable%'; name | setting ----------------------+--------- enable_bitmapscan | on + enable_gather | on enable_gathermerge | on enable_hashagg | on enable_hashjoin | on @@ -84,7 +85,7 @@ select name, setting from pg_settings where name like 'enable%'; enable_seqscan | on enable_sort | on enable_tidscan | on -(12 rows) +(13 rows) -- Test that the pg_timezone_names and pg_timezone_abbrevs views are -- more-or-less working. We can't test their contents in any great detail