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;
}