Add pg_settings.pending_restart column
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 15 May 2015 00:08:51 +0000 (20:08 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 15 May 2015 00:08:51 +0000 (20:08 -0400)
with input from David G. Johnston, Robert Haas, Michael Paquier

doc/src/sgml/catalogs.sgml
src/backend/utils/misc/guc.c
src/include/catalog/catversion.h
src/include/catalog/pg_proc.h
src/include/utils/guc_tables.h
src/test/regress/expected/rules.out

index 2756652be2129ae158383c3d3470bd572131fbb1..6c51974961bf4685a0002bb2a4fae579275be0e4 100644 (file)
@@ -9042,6 +9042,14 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
       or when examined by a non-superuser)
       </entry>
      </row>
+     <row>
+      <entry><structfield>pending_restart</structfield></entry>
+      <entry><type>boolean</type></entry>
+      <entry><literal>true</literal> if the value has been changed in the
+      configuration file but needs a restart; or <literal>false</literal>
+      otherwise.
+      </entry>
+     </row>
     </tbody>
    </tgroup>
   </table>
index 5f71dedff341bca8b515a946c71ea2cb426f766f..222228ae5a7d060752650d8b97e8ab34d694e23e 100644 (file)
@@ -5927,12 +5927,14 @@ set_config_option(const char *name, const char *value,
                {
                    if (*conf->variable != newval)
                    {
+                       record->status |= GUC_PENDING_RESTART;
                        ereport(elevel,
                                (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
                                 errmsg("parameter \"%s\" cannot be changed without restarting the server",
                                        name)));
                        return 0;
                    }
+                   record->status &= ~GUC_PENDING_RESTART;
                    return -1;
                }
 
@@ -6015,12 +6017,14 @@ set_config_option(const char *name, const char *value,
                {
                    if (*conf->variable != newval)
                    {
+                       record->status |= GUC_PENDING_RESTART;
                        ereport(elevel,
                                (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
                                 errmsg("parameter \"%s\" cannot be changed without restarting the server",
                                        name)));
                        return 0;
                    }
+                   record->status &= ~GUC_PENDING_RESTART;
                    return -1;
                }
 
@@ -6103,12 +6107,14 @@ set_config_option(const char *name, const char *value,
                {
                    if (*conf->variable != newval)
                    {
+                       record->status |= GUC_PENDING_RESTART;
                        ereport(elevel,
                                (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
                                 errmsg("parameter \"%s\" cannot be changed without restarting the server",
                                        name)));
                        return 0;
                    }
+                   record->status &= ~GUC_PENDING_RESTART;
                    return -1;
                }
 
@@ -6209,12 +6215,14 @@ set_config_option(const char *name, const char *value,
                    if (*conf->variable == NULL || newval == NULL ||
                        strcmp(*conf->variable, newval) != 0)
                    {
+                       record->status |= GUC_PENDING_RESTART;
                        ereport(elevel,
                                (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
                                 errmsg("parameter \"%s\" cannot be changed without restarting the server",
                                        name)));
                        return 0;
                    }
+                   record->status &= ~GUC_PENDING_RESTART;
                    return -1;
                }
 
@@ -6302,12 +6310,14 @@ set_config_option(const char *name, const char *value,
                {
                    if (*conf->variable != newval)
                    {
+                       record->status |= GUC_PENDING_RESTART;
                        ereport(elevel,
                                (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
                                 errmsg("parameter \"%s\" cannot be changed without restarting the server",
                                        name)));
                        return 0;
                    }
+                   record->status &= ~GUC_PENDING_RESTART;
                    return -1;
                }
 
@@ -8009,6 +8019,8 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
        values[14] = NULL;
        values[15] = NULL;
    }
+
+   values[16] = (conf->status & GUC_PENDING_RESTART) ? "t" : "f";
 }
 
 /*
@@ -8044,7 +8056,7 @@ show_config_by_name(PG_FUNCTION_ARGS)
  * show_all_settings - equiv to SHOW ALL command but implemented as
  * a Table Function.
  */
-#define NUM_PG_SETTINGS_ATTS   16
+#define NUM_PG_SETTINGS_ATTS   17
 
 Datum
 show_all_settings(PG_FUNCTION_ARGS)
@@ -8104,6 +8116,8 @@ show_all_settings(PG_FUNCTION_ARGS)
                           TEXTOID, -1, 0);
        TupleDescInitEntry(tupdesc, (AttrNumber) 16, "sourceline",
                           INT4OID, -1, 0);
+       TupleDescInitEntry(tupdesc, (AttrNumber) 17, "pending_restart",
+                          BOOLOID, -1, 0);
 
        /*
         * Generate attribute metadata needed later to produce tuples from raw
index a350832423685b35c2546bb7aa36b9746599dcd2..09fdc364e03ba18a4cad6c8ce86088e55dc185a3 100644 (file)
@@ -53,6 +53,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 201505121
+#define CATALOG_VERSION_NO 201505141
 
 #endif
index a1e244223d6ab0595513cf565c2b91a59d353e93..d4bc60b7d66a22e1e0bdac3944485619e626d2a0 100644 (file)
@@ -3067,7 +3067,7 @@ DATA(insert OID = 2077 (  current_setting PGNSP PGUID 12 1 0 0 0 f f f f t f s 1
 DESCR("SHOW X as a function");
 DATA(insert OID = 2078 (  set_config       PGNSP PGUID 12 1 0 0 0 f f f f f f v 3 0 25 "25 25 16" _null_ _null_ _null_ _null_ _null_ set_config_by_name _null_ _null_ _null_ ));
 DESCR("SET X as a function");
-DATA(insert OID = 2084 (  pg_show_all_settings PGNSP PGUID 12 1 1000 0 0 f f f f t t s 0 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,1009,25,25,25,23}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline}" _null_ _null_ show_all_settings _null_ _null_ _null_ ));
+DATA(insert OID = 2084 (  pg_show_all_settings PGNSP PGUID 12 1 1000 0 0 f f f f t t s 0 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,1009,25,25,25,23,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart}" _null_ _null_ show_all_settings _null_ _null_ _null_ ));
 DESCR("SHOW ALL as a function");
 DATA(insert OID = 3329 (  pg_show_all_file_settings    PGNSP PGUID 12 1 1000 0 0 f f f f t t s 0 0 2249 "" "{25,23,23,25,25}" "{o,o,o,o,o}" "{sourcefile,sourceline,seqno,name,setting}" _null_ _null_ show_all_file_settings _null_ _null_ _null_ ));
 DESCR("show config file settings");
index cf319afd52d3c7bd20c5088c8866452fc691f8f9..c0f9cb9374b19ce46124db0092893bcfb36e60de 100644 (file)
@@ -167,6 +167,7 @@ struct config_generic
  * Caution: the GUC_IS_IN_FILE bit is transient state for ProcessConfigFile.
  * Do not assume that its value represents useful information elsewhere.
  */
+#define GUC_PENDING_RESTART    0x0002
 
 
 /* GUC records for specific variable types */
index cb18bb931a4870b1487842de9b03f398b1b8f242..6eb2e8c8b72651f90764a356d1b6a7eb4b1c2d68 100644 (file)
@@ -1616,8 +1616,9 @@ pg_settings| SELECT a.name,
     a.boot_val,
     a.reset_val,
     a.sourcefile,
-    a.sourceline
-   FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline);
+    a.sourceline,
+    a.pending_restart
+   FROM pg_show_all_settings() a(name, setting, unit, category, short_desc, extra_desc, context, vartype, source, min_val, max_val, enumvals, boot_val, reset_val, sourcefile, sourceline, pending_restart);
 pg_shadow| SELECT pg_authid.rolname AS usename,
     pg_authid.oid AS usesysid,
     pg_authid.rolcreatedb AS usecreatedb,