reset all: command line and .conf options change defaults
authorBruce Momjian
Thu, 7 Jun 2001 04:50:57 +0000 (04:50 +0000)
committerBruce Momjian
Thu, 7 Jun 2001 04:50:57 +0000 (04:50 +0000)
on RESET ALL those are restored.

show all: GUC + non-GUC.

SHOW ALL, RESET ALL

Marko Kreen

doc/src/sgml/ref/reset.sgml
doc/src/sgml/ref/show.sgml
src/backend/commands/variable.c
src/backend/parser/gram.y
src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/backend/utils/misc/guc-file.l
src/backend/utils/misc/guc.c
src/include/utils/guc.h

index 7bb87570add3fc4befbdd4cb78dd408a9fc316f5..85194663eb2e7baec5d3fc4ce4b7daad01e7d123 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -16,6 +16,9 @@ Postgres documentation
   
 RESET variable
   
+  
+RESET ALL
+  
 
   
    Inputs
@@ -30,6 +33,14 @@ RESET variable
        
       
      
+     
+      ALL
+      
+       
+        Resets all run-time parameters to default values.
+       
+      
+     
     
    
   
index 934b0567f2d695d2f6c25acf0f098449cf08f9d3..3674a97c5ba5d57932ea5e32174b5e89187ee7e4 100644 (file)
@@ -1,5 +1,5 @@
 
 
@@ -16,6 +16,9 @@ Postgres documentation
   
 SHOW name
   
+  
+SHOW ALL
+  
 
   
    Inputs
@@ -32,6 +35,14 @@ SHOW name
        
       
      
+     
+      ALL
+      
+       
+        Show all current session parameters.
+       
+      
+     
     
    
   
index eb43be8f3f0e7a57edf3859b77fcdb83e7efae94..6f22bcc33d2de615ffd3c9ef37503284d8857f05 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.48 2001/05/08 21:06:42 petere Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.49 2001/06/07 04:50:56 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -39,9 +39,9 @@
 #endif
 
 
-static bool show_date(void);
-static bool reset_date(void);
-static bool parse_date(char *);
+static bool show_datestyle(void);
+static bool reset_datestyle(void);
+static bool parse_datestyle(char *);
 static bool show_timezone(void);
 static bool reset_timezone(void);
 static bool parse_timezone(char *);
@@ -192,7 +192,7 @@ static int  DefaultDateStyle;
 static bool DefaultEuroDates;
 
 static bool
-parse_date(char *value)
+parse_datestyle(char *value)
 {
    char       *tok;
    int         dcnt = 0,
@@ -200,7 +200,7 @@ parse_date(char *value)
 
    if (value == NULL)
    {
-       reset_date();
+       reset_datestyle();
        return TRUE;
    }
 
@@ -261,7 +261,7 @@ parse_date(char *value)
 }
 
 static bool
-show_date(void)
+show_datestyle(void)
 {
    char        buf[64];
 
@@ -291,7 +291,7 @@ show_date(void)
 }
 
 static bool
-reset_date(void)
+reset_datestyle(void)
 {
    DateStyle = DefaultDateStyle;
    EuroDates = DefaultEuroDates;
@@ -325,7 +325,7 @@ set_default_datestyle(void)
    DBDate = strdup(DBDate);
 
    /* Parse desired setting into DateStyle/EuroDates */
-   parse_date(DBDate);
+   parse_datestyle(DBDate);
 
    free(DBDate);
 
@@ -396,7 +396,7 @@ show_timezone(void)
 
    tz = getenv("TZ");
 
-   elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unknown"));
+   elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unset"));
 
    return TRUE;
 }  /* show_timezone() */
@@ -586,7 +586,7 @@ parse_random_seed(char *value)
 static bool
 show_random_seed(void)
 {
-   elog(NOTICE, "Seed for random number generator is not known");
+   elog(NOTICE, "Seed for random number generator is unavailable");
    return (TRUE);
 }
 
@@ -708,7 +708,7 @@ SetPGVariable(const char *name, const char *value)
     * Special cases ought to be removed and handled separately by TCOP
     */
    if (strcasecmp(name, "datestyle") == 0)
-       parse_date(mvalue);
+       parse_datestyle(mvalue);
    else if (strcasecmp(name, "timezone") == 0)
        parse_timezone(mvalue);
    else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -724,18 +724,17 @@ SetPGVariable(const char *name, const char *value)
    else if (strcasecmp(name, "session_authorization") == 0)
        SetSessionAuthorization(value);
    else
-       SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET);
+       SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET, false);
 
    if (mvalue)
        pfree(mvalue);
 }
 
-
 void
 GetPGVariable(const char *name)
 {
    if (strcasecmp(name, "datestyle") == 0)
-       show_date();
+       show_datestyle();
    else if (strcasecmp(name, "timezone") == 0)
        show_timezone();
    else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -748,7 +747,17 @@ GetPGVariable(const char *name)
        show_server_encoding();
    else if (strcasecmp(name, "seed") == 0)
        show_random_seed();
-   else
+   else if (strcasecmp(name, "all") == 0)
+   {
+       ShowAllGUCConfig();
+       show_datestyle();
+       show_timezone();
+       show_DefaultXactIsoLevel();
+       show_XactIsoLevel();
+       show_client_encoding();
+       show_server_encoding();
+       show_random_seed();
+   } else
    {
        const char *val = GetConfigOption(name);
 
@@ -760,7 +769,7 @@ void
 ResetPGVariable(const char *name)
 {
    if (strcasecmp(name, "datestyle") == 0)
-       reset_date();
+       reset_datestyle();
    else if (strcasecmp(name, "timezone") == 0)
        reset_timezone();
    else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -773,6 +782,17 @@ ResetPGVariable(const char *name)
        reset_server_encoding();
    else if (strcasecmp(name, "seed") == 0)
        reset_random_seed();
-   else
-       SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET);
+   else if (strcasecmp(name, "all") == 0)
+   {
+       reset_DefaultXactIsoLevel();
+       reset_XactIsoLevel();
+       reset_random_seed();
+       /* reset_server_encoding(); */
+       reset_client_encoding();
+       reset_datestyle();
+       reset_timezone();
+
+       ResetAllOptions();
+   } else
+       SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET, false);
 }
index 6cf2adcb5ba852e8366ecbf5a620a406b2b5398e..308b49fd727c13bb593512f0bea1abc420769d00 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.228 2001/06/04 23:27:23 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.229 2001/06/07 04:50:56 momjian Exp $
  *
  * HISTORY
  *   AUTHOR            DATE            MAJOR EVENT
@@ -860,6 +860,12 @@ VariableShowStmt:  SHOW ColId
                    n->name  = "timezone";
                    $$ = (Node *) n;
                }
+       | SHOW ALL
+               {
+                   VariableShowStmt *n = makeNode(VariableShowStmt);
+                   n->name  = "all";
+                   $$ = (Node *) n;
+               }
        | SHOW TRANSACTION ISOLATION LEVEL
                {
                    VariableShowStmt *n = makeNode(VariableShowStmt);
@@ -886,6 +892,12 @@ VariableResetStmt: RESET ColId
                    n->name  = "XactIsoLevel";
                    $$ = (Node *) n;
                }
+       | RESET ALL
+               {
+                   VariableResetStmt *n = makeNode(VariableResetStmt);
+                   n->name  = "all";
+                   $$ = (Node *) n;
+               }
        ;
 
 
index 6ccc9e577ba9d24da788fdd97353fd9cd7c1ad40..96d7d1e3ad9c1bdd64445084b46f65d2a350eed5 100644 (file)
@@ -28,7 +28,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.216 2001/06/03 14:53:56 petere Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.217 2001/06/07 04:50:57 momjian Exp $
  *
  * NOTES
  *
@@ -533,7 +533,7 @@ PostmasterMain(int argc, char *argv[])
                            elog(ERROR, "-c %s requires argument", optarg);
                    }
 
-                   SetConfigOption(name, value, PGC_POSTMASTER);
+                   SetConfigOption(name, value, PGC_POSTMASTER, true);
                    free(name);
                    if (value)
                        free(value);
index 19a44ff67d72c9304d637402b11bdb59c678629a..8e5115f755a23e901fa63bfcc70e09989152aff4 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.218 2001/04/14 19:11:45 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.219 2001/06/07 04:50:57 momjian Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -1462,7 +1462,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
 
                    /* all options are allowed if not under postmaster */
                    SetConfigOption(name, value,
-                    (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER);
+                    (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true);
                    free(name);
                    if (value)
                        free(value);
@@ -1709,7 +1709,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
    if (!IsUnderPostmaster)
    {
        puts("\nPOSTGRES backend interactive interface ");
-       puts("$Revision: 1.218 $ $Date: 2001/04/14 19:11:45 $\n");
+       puts("$Revision: 1.219 $ $Date: 2001/06/07 04:50:57 $\n");
    }
 
    /*
index cb39525df928fa38519c3d6659fb50bbeed09e63..950dbb6ef92c9287ebf38c547192ac5fc551b548 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.7 2001/06/01 20:29:43 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.8 2001/06/07 04:50:57 momjian Exp $
  */
 
 %{
@@ -260,13 +260,13 @@ ProcessConfigFile(GucContext context)
     */
     for(item = head; item; item=item->next)
    {
-       if (!set_config_option(item->name, item->value, context, false))
+       if (!set_config_option(item->name, item->value, context, false, false))
            goto cleanup_exit;
    }
 
     /* If we got here all the options parsed okay. */
    for(item = head; item; item=item->next)
-       set_config_option(item->name, item->value, context, true);
+       set_config_option(item->name, item->value, context, true, true);
 
  cleanup_exit:
    free_name_value_list(head);
index 6e080594f8b6662891da9be5b2bb5a0c566f22d2..78c569f80b882e405e0fbcc09ea56bd38bf775f0 100644 (file)
@@ -4,7 +4,7 @@
  * Support for grand unified configuration scheme, including SET
  * command, configuration file, and command line options.
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.36 2001/05/17 17:44:18 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.37 2001/06/07 04:50:57 momjian Exp $
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  * Written by Peter Eisentraut .
@@ -136,9 +136,10 @@ struct config_string
    const char *name;
    GucContext  context;
    char      **variable;
-   const char *default_val;
+   const char *boot_default_val;
    bool        (*parse_hook) (const char *proposed);
    void        (*assign_hook) (const char *newval);
+   char        *default_val;
 };
 
 
@@ -433,6 +434,15 @@ ResetAllOptions(void)
    {
        char       *str = NULL;
 
+       if (!ConfigureNamesString[i].default_val
+               && ConfigureNamesString[i].boot_default_val)
+       {
+           str = strdup(ConfigureNamesString[i].boot_default_val);
+           if (str == NULL)
+               elog(ERROR, "out of memory");
+
+           ConfigureNamesString[i].default_val = str;
+       }
        if (ConfigureNamesString[i].default_val)
        {
            str = strdup(ConfigureNamesString[i].default_val);
@@ -582,7 +592,7 @@ parse_real(const char *value, double *result)
  */
 bool
 set_config_option(const char *name, const char *value, GucContext
-                 context, bool DoIt)
+                 context, bool DoIt, bool makeDefault)
 {
    struct config_generic *record;
    enum config_type type;
@@ -653,7 +663,11 @@ set_config_option(const char *name, const char *value, GucContext
                        return false;
                    }
                    if (DoIt)
+                   {
                        *conf->variable = boolval;
+                       if (makeDefault)
+                           conf->default_val = boolval;
+                   }
                }
                else if (DoIt)
                    *conf->variable = conf->default_val;
@@ -681,7 +695,11 @@ set_config_option(const char *name, const char *value, GucContext
                        return false;
                    }
                    if (DoIt)
+                   {
                        *conf->variable = intval;
+                       if (makeDefault)
+                           conf->default_val = intval;
+                   }
                }
                else if (DoIt)
                    *conf->variable = conf->default_val;
@@ -709,7 +727,11 @@ set_config_option(const char *name, const char *value, GucContext
                        return false;
                    }
                    if (DoIt)
+                   {
                        *conf->variable = dval;
+                       if (makeDefault)
+                           conf->default_val = dval;
+                   }
                }
                else if (DoIt)
                    *conf->variable = conf->default_val;
@@ -742,12 +764,33 @@ set_config_option(const char *name, const char *value, GucContext
                        if (*conf->variable)
                            free(*conf->variable);
                        *conf->variable = str;
+                       if (makeDefault)
+                       {
+                           if (conf->default_val)
+                               free(conf->default_val);
+                           str = strdup(value);
+                           if (str == NULL) {
+                               elog(elevel, "out of memory");
+                               return false;
+                           }
+                           conf->default_val = str;
+                       }
                    }
                }
                else if (DoIt)
                {
                    char       *str;
 
+                   if (!conf->default_val && conf->boot_default_val)
+                   {
+                       str = strdup(conf->boot_default_val);
+                       if (str == NULL)
+                       {
+                           elog(elevel, "out of memory");
+                           return false;
+                       }
+                       conf->boot_default_val = str;
+                   }
                    str = strdup(conf->default_val);
                    if (str == NULL)
                    {
@@ -776,9 +819,9 @@ set_config_option(const char *name, const char *value, GucContext
  */
 void
 SetConfigOption(const char *name, const char *value, GucContext
-               context)
+               context, bool makeDefault)
 {
-   (void) set_config_option(name, value, context, true);
+   (void) set_config_option(name, value, context, true, makeDefault);
 }
 
 
@@ -826,6 +869,58 @@ GetConfigOption(const char *name)
    return NULL;
 }
 
+static void
+_ShowOption(enum config_type opttype, struct config_generic *record)
+{
+   static char buffer[256];
+   char *val;
+
+   switch (opttype)
+   {
+       case PGC_BOOL:
+           val = *((struct config_bool *) record)->variable ? "on" : "off";
+           break;
+       case PGC_INT:
+           snprintf(buffer, 256, "%d", *((struct config_int *) record)->variable);
+           val = buffer;
+           break;
+
+       case PGC_REAL:
+           snprintf(buffer, 256, "%g", *((struct config_real *) record)->variable);
+           val = buffer;
+           break;
+
+       case PGC_STRING:
+           val = strlen(*((struct config_string *) record)->variable) != 0 ?
+               *((struct config_string *) record)->variable : "unset";
+           break;
+
+       default:
+           val = "???";
+   }
+   elog(NOTICE, "%s is %s", record->name, val);
+}
+
+void
+ShowAllGUCConfig(void)
+{
+   int         i;
+
+   for (i = 0; ConfigureNamesBool[i].name; i++)
+       _ShowOption(PGC_BOOL, (struct config_generic *)&ConfigureNamesBool[i]);
+
+   for (i = 0; ConfigureNamesInt[i].name; i++)
+       _ShowOption(PGC_INT, (struct config_generic *)&ConfigureNamesInt[i]);
+
+   for (i = 0; ConfigureNamesReal[i].name; i++)
+       _ShowOption(PGC_REAL, (struct config_generic *)&ConfigureNamesReal[i]);
+
+   for (i = 0; ConfigureNamesString[i].name; i++)
+       _ShowOption(PGC_STRING, (struct config_generic *)&ConfigureNamesString[i]);
+}
+
+
+
 
 
 /*
index 978b9da859e7791e0d7623e4513516c5325601fa..1d925f0c3eade81346bb1e694cd33ae37899a506 100644 (file)
@@ -4,7 +4,7 @@
  * External declarations pertaining to backend/utils/misc/guc.c and
  * backend/utils/misc/guc-file.l
  *
- * $Header: /cvsroot/pgsql/src/include/utils/guc.h,v 1.6 2001/03/22 04:01:12 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/utils/guc.h,v 1.7 2001/06/07 04:50:57 momjian Exp $
  */
 #ifndef GUC_H
 #define GUC_H
@@ -46,12 +46,13 @@ typedef enum
 } GucContext;
 
 
-void       SetConfigOption(const char *name, const char *value, GucContext context);
+void       SetConfigOption(const char *name, const char *value, GucContext context, bool makeDefault);
 const char *GetConfigOption(const char *name);
 void       ProcessConfigFile(GucContext context);
 void       ResetAllOptions(void);
 void       ParseLongOption(const char *string, char **name, char **value);
-bool       set_config_option(const char *name, const char *value, GucContext context, bool DoIt);
+bool       set_config_option(const char *name, const char *value, GucContext context, bool DoIt, bool makeDefault);
+void       ShowAllGUCConfig(void);
 
 
 extern bool Debug_print_query;