Re: [BUGS] BUG #1148: server restarts depending on stats options - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [BUGS] BUG #1148: server restarts depending on stats options
Date
Msg-id 200405070133.i471XJu02046@candle.pha.pa.us
Whole thread Raw
Responses Re: [BUGS] BUG #1148: server restarts depending on stats options  (Peter Eisentraut <peter_e@gmx.net>)
List pgsql-patches
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:      xzilla@users.sourceforge.net
>
> 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:
>
> postgres@phppgadmin:/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
  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/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;
  }

pgsql-patches by date:

Previous
From: Neil Conway
Date:
Subject: refactor CheckDropPermissions()
Next
From: olobs@juno.com (Jim Carlson)
Date:
Subject: SEAN CHITTENDEN