Re: postmaster -d option (was Re: [GENERAL] Relation 0 does - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: postmaster -d option (was Re: [GENERAL] Relation 0 does
Date
Msg-id 200209270358.g8R3wKM00623@candle.pha.pa.us
Whole thread Raw
In response to Re: postmaster -d option (was Re: [GENERAL] Relation 0 does not exist)  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > diff -c -c -r1.294 postgres.c
> > *** src/backend/tcop/postgres.c    25 Sep 2002 20:31:40 -0000    1.294
> > --- src/backend/tcop/postgres.c    26 Sep 2002 05:15:41 -0000
> > ***************
> > *** 1281,1288 ****
> >                            * -d 0 allows user to prevent postmaster debug
> >                            * from propagating to backend.
> >                            */
> > !                         SetConfigOption("server_min_messages", "notice",
> > !                                         ctx, gucsource);
> >                   }
> >                   break;
>
> > --- 1281,1287 ----
> >                            * -d 0 allows user to prevent postmaster debug
> >                            * from propagating to backend.
> >                            */
> > !                         ResetPGVariable("server_min_messages");
> >                   }
> >                   break;
>

Turns out I had to revert this change.  There isn't a username at this
point in the code so the ResetPGVariable username test fails, and even
then, I don't think there is any way to set a variable to the value
before -d5 set it.

> If you want "export PGOPTIONS=-d0" to do what the comment says, you'd
> also need to Reset all of the other GUC variables that -dN might have
> set.  However, I'm not sure that I agree with the goal in the first
> place.  If the admin has set debugging on the postmaster command line,
> should it really be possible for users to turn it off so easily?

I see what you are saying, that you can pass -d0 from the client and
undo the -d5.  Yes, I was wondering about that because even on the
command line, if you do -d5 -d0, you still get those extra options.

OK, attached patch applied.  The restriction that you can't lower the
debug level with PGOPTIONS is a separate issue.  What I clearly didn't
want to do was to reset those other options for -d0, and I didn't have
to do that for -d0 to work as advertised.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/tcop/postgres.c,v
retrieving revision 1.296
diff -c -c -r1.296 postgres.c
*** src/backend/tcop/postgres.c    27 Sep 2002 03:34:15 -0000    1.296
--- src/backend/tcop/postgres.c    27 Sep 2002 03:49:34 -0000
***************
*** 1136,1141 ****
--- 1136,1142 ----
      const char *DBName = NULL;
      bool        secure;
      int            errs = 0;
+     int            debug_flag = 0;
      GucContext    ctx;
      GucSource    gucsource;
      char       *tmp;
***************
*** 1250,1255 ****
--- 1251,1257 ----

              case 'd':            /* debug level */
                  {
+                     debug_flag = atoi(optarg);
                      /* Set server debugging level. */
                      if (atoi(optarg) != 0)
                      {
***************
*** 1259,1283 ****
                          SetConfigOption("server_min_messages", debugstr, ctx, gucsource);
                          pfree(debugstr);

-                         /*
-                          * -d is not the same as setting
-                          * client_min_messages because it enables other
-                          * output options.
-                          */
-                         if (atoi(optarg) >= 1)
-                             SetConfigOption("log_connections", "true", ctx, gucsource);
-                         if (atoi(optarg) >= 2)
-                             SetConfigOption("log_statement", "true", ctx, gucsource);
-                         if (atoi(optarg) >= 3)
-                             SetConfigOption("debug_print_parse", "true", ctx, gucsource);
-                         if (atoi(optarg) >= 4)
-                             SetConfigOption("debug_print_plan", "true", ctx, gucsource);
-                         if (atoi(optarg) >= 5)
-                             SetConfigOption("debug_print_rewritten", "true", ctx, gucsource);
                      }
                      else
                          /*
!                          * -d 0 allows user to prevent postmaster debug
                           * from propagating to backend.  It would be nice
                           * to set it to the postgresql.conf value here.
                           */
--- 1261,1270 ----
                          SetConfigOption("server_min_messages", debugstr, ctx, gucsource);
                          pfree(debugstr);

                      }
                      else
                          /*
!                          * -d0 allows user to prevent postmaster debug
                           * from propagating to backend.  It would be nice
                           * to set it to the postgresql.conf value here.
                           */
***************
*** 1519,1524 ****
--- 1506,1527 ----
                  errs++;
                  break;
          }
+
+     /*
+      * -d is not the same as setting
+      * server_min_messages because it enables other
+      * output options.
+      */
+     if (debug_flag >= 1)
+         SetConfigOption("log_connections", "true", ctx, gucsource);
+     if (debug_flag >= 2)
+         SetConfigOption("log_statement", "true", ctx, gucsource);
+     if (debug_flag >= 3)
+         SetConfigOption("debug_print_parse", "true", ctx, gucsource);
+     if (debug_flag >= 4)
+         SetConfigOption("debug_print_plan", "true", ctx, gucsource);
+     if (debug_flag >= 5)
+         SetConfigOption("debug_print_rewritten", "true", ctx, gucsource);

      /*
       * Post-processing for command line options.

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: hacker help: PHP-4.2.3 patch to allow restriction of database access
Next
From: Tatsuo Ishii
Date:
Subject: Re: unicode