I have applied the attached patch to fix this problem.  Sample output
is:

        test=> set log_statement_stats = true;
        SET
        test=> set log_parser_stats = true;
        ERROR:  Can not enable parameter when "log_statement_stats" is true.
        test=> begin;
        BEGIN
        test=> set log_statement_stats = false;
        SET
        test=> set log_parser_stats = true;
        SET
        test=> commit;
        COMMIT
        test=> set log_statement_stats = true;
        ERROR:  Can not enable "log_statement_stats" when "log_parser_stats",
        "log_planner_stats", or "log_executor_stats" is true.

And setting postgresql.conf with conflicting options puts this in the
server logs:

        FATAL:  Can not enable "log_statement_stats" when "log_parser_stats",
                "log_planner_stats", or "log_executor_stats" is true.

---------------------------------------------------------------------------

PostgreSQL Bugs List wrote:
> 
> The following bug has been logged online:
> 
> Bug reference:      1148
> Logged by:          Robert Treat
> 
> Email address:      [EMAIL PROTECTED]
> 
> PostgreSQL version: 7.5 Dev
> 
> Operating system:   Slackware Linux 8.1 (Kernel 2.4.18)
> 
> Description:        server restarts depending on stats options
> 
> Details: 
> 
> set log_statement_stats = true and any of 
> log_(executer|planner|parser)_stats = true and you will get a database 
> restart when attempting to connect. 
> 
> from my logs:
> 
> [EMAIL PROTECTED]:/usr/local/pgsql-7.5dev$ cat data/logfile 
> LOG:  received smart shutdown request
> LOG:  shutting down
> LOG:  database system is shut down
> LOG:  database system was shut down at 2004-05-06 12:59:01 PDT
> LOG:  checkpoint record is at 0/9DDC68
> LOG:  redo record is at 0/9DDC68; undo record is at 0/0; shutdown TRUE
> LOG:  next transaction ID: 460; next OID: 17207
> LOG:  database system is ready
> WARNING:  statement-level statistics are disabled because parser, planner, 
> or executor statistics are on 
> TRAP: BadState("!(((bool) ((CurrentUserId) != 0)))", File: "miscinit.c", 
> Line: 252) 
> LOG:  server process (PID 22690) was terminated by signal 6
> LOG:  terminating any other active server processes
> WARNING:  terminating connection because of crash of another server process
> DETAIL:  The postmaster has commanded this server process to roll back the 
> current transaction and exit, because another server process exited 
> abnormally and possibly corrupted shared memory. 
> HINT:  In a moment you should be able to reconnect to the database and 
> repeat your command. 
> LOG:  all server processes terminated; reinitializing
> LOG:  database system was interrupted at 2004-05-06 12:59:02 PDT
> LOG:  checkpoint record is at 0/9DDC68
> LOG:  redo record is at 0/9DDC68; undo record is at 0/0; shutdown TRUE
> LOG:  next transaction ID: 460; next OID: 17207
> LOG:  database system was not properly shut down; automatic recovery in 
> progress 
> LOG:  record with zero length at 0/9DDCA8
> LOG:  redo is not required
> LOG:  database system is ready
> 
> 
> this is from a snapshot build on may 5th
> 
> 
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
>       joining column's datatypes do not match
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (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/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v
retrieving revision 1.202
diff -c -c -r1.202 guc.c
*** src/backend/utils/misc/guc.c        7 May 2004 00:24:58 -0000       1.202
--- src/backend/utils/misc/guc.c        7 May 2004 01:32:35 -0000
***************
*** 103,108 ****
--- 103,110 ----
  static const char *assign_log_stmtlvl(int *var, const char *newval,
                                                   bool doit, GucSource source);
  static bool assign_phony_autocommit(bool newval, bool doit, GucSource source);
+ static bool assign_stage_log_stats(bool newval, bool doit, GucSource source);
+ static bool assign_log_stats(bool newval, bool doit, GucSource source);
  
  
  /*
***************
*** 577,583 ****
                        NULL
                },
                &log_parser_stats,
!               false, NULL, NULL
        },
        {
                {"log_planner_stats", PGC_USERLIMIT, STATS_MONITORING,
--- 579,585 ----
                        NULL
                },
                &log_parser_stats,
!               false, assign_stage_log_stats, NULL
        },
        {
                {"log_planner_stats", PGC_USERLIMIT, STATS_MONITORING,
***************
*** 585,591 ****
                        NULL
                },
                &log_planner_stats,
!               false, NULL, NULL
        },
        {
                {"log_executor_stats", PGC_USERLIMIT, STATS_MONITORING,
--- 587,593 ----
                        NULL
                },
                &log_planner_stats,
!               false, assign_stage_log_stats, NULL
        },
        {
                {"log_executor_stats", PGC_USERLIMIT, STATS_MONITORING,
***************
*** 593,599 ****
                        NULL
                },
                &log_executor_stats,
!               false, NULL, NULL
        },
        {
                {"log_statement_stats", PGC_USERLIMIT, STATS_MONITORING,
--- 595,601 ----
                        NULL
                },
                &log_executor_stats,
!               false, assign_stage_log_stats, NULL
        },
        {
                {"log_statement_stats", PGC_USERLIMIT, STATS_MONITORING,
***************
*** 601,607 ****
                        NULL
                },
                &log_statement_stats,
!               false, NULL, NULL
        },
  #ifdef BTREE_BUILD_STATS
        {
--- 603,609 ----
                        NULL
                },
                &log_statement_stats,
!               false, assign_log_stats, NULL
        },
  #ifdef BTREE_BUILD_STATS
        {
***************
*** 4704,4709 ****
--- 4706,4752 ----
                                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                                errmsg("SET AUTOCOMMIT TO OFF is no longer 
supported")));
                return false;
+       }
+       return true;
+ }
+ 
+ 
+ static bool
+ assign_stage_log_stats(bool newval, bool doit, GucSource source)
+ {
+       if (newval)
+       {
+               if (log_statement_stats)
+               {
+                       if (doit)
+                               ereport(ERROR,
+                                               (errcode(ERRCODE_ERROR_IN_ASSIGNMENT),
+                                       errmsg("Can not enable parameter when 
\"log_statement_stats\" is true.")));
+                       else
+                               return false;
+               }
+               return true;
+       }
+       return true;
+ }
+ 
+ 
+ static bool
+ assign_log_stats(bool newval, bool doit, GucSource source)
+ {
+       if (newval)
+       {
+               if (log_parser_stats || log_planner_stats || log_executor_stats)
+               {
+                       if (doit)
+                               ereport(ERROR,
+                                               (errcode(ERRCODE_ERROR_IN_ASSIGNMENT),
+                                       errmsg("Can not enable \"log_statement_stats\" 
when \"log_parser_stats\",\n"
+                                                       "\"log_planner_stats\", or 
\"log_executor_stats\" is true.")));
+                       else
+                               return false;
+               }
+               return true;
        }
        return true;
  }
---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to