From 0ed6fd76935293b13647a5bd59aff23e9b1029f5 Mon Sep 17 00:00:00 2001 From: Teodor Sigaev Date: Thu, 14 Feb 2019 15:45:55 +0300 Subject: [PATCH] fix support of predefined GUC variables (in postgresql.conf) --- plantuner.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/plantuner.c b/plantuner.c index 5a1d480..050e3b7 100644 --- a/plantuner.c +++ b/plantuner.c @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -58,6 +59,8 @@ static char *enableIndexesOutStr = ""; get_relation_info_hook_type prevHook = NULL; static bool fix_empty_table = false; +static bool plantuner_enable_inited = false; +static bool plantuner_disable_inited = false; static const char * indexesAssign(const char * newval, bool doit, GucSource source, bool isDisable) @@ -83,6 +86,19 @@ indexesAssign(const char * newval, bool doit, GucSource source, bool isDisable) (int)(sizeof(Oid) * (nOids+1))); } + /* + * follow work could be done only in normal processing because of + * accsess to system catalog + */ + if (MyBackendId == InvalidBackendId || !IsUnderPostmaster || + !IsNormalProcessingMode() || MyAuxProcType != NotAnAuxProcess) + return newval; + + if (isDisable) + plantuner_disable_inited = true; + else + plantuner_enable_inited = true; + foreach(l, namelist) { char *curname = (char *) lfirst(l); @@ -161,6 +177,15 @@ assignEnabledIndexes(const char * newval, bool doit, GucSource source) return indexesAssign(newval, doit, source, false); } +static void +lateInit() +{ + if (!plantuner_enable_inited) + indexesAssign(enableIndexesOutStr, true, PGC_S_USER, false); + if (!plantuner_disable_inited) + indexesAssign(disableIndexesOutStr, true, PGC_S_USER, true); +} + #if PG_VERSION_NUM >= 90100 static bool @@ -215,6 +240,8 @@ indexFilter(PlannerInfo *root, Oid relationObjectId, bool inhparent, { int i; + lateInit(); + for(i=0;i