|
|
@ -25,6 +25,7 @@ static int auto_explain_log_min_duration = -1; /* msec or -1 */ |
|
|
|
static bool auto_explain_log_analyze = false; |
|
|
|
static bool auto_explain_log_analyze = false; |
|
|
|
static bool auto_explain_log_verbose = false; |
|
|
|
static bool auto_explain_log_verbose = false; |
|
|
|
static bool auto_explain_log_buffers = false; |
|
|
|
static bool auto_explain_log_buffers = false; |
|
|
|
|
|
|
|
static bool auto_explain_log_triggers = false; |
|
|
|
static bool auto_explain_log_timing = false; |
|
|
|
static bool auto_explain_log_timing = false; |
|
|
|
static int auto_explain_log_format = EXPLAIN_FORMAT_TEXT; |
|
|
|
static int auto_explain_log_format = EXPLAIN_FORMAT_TEXT; |
|
|
|
static bool auto_explain_log_nested_statements = false; |
|
|
|
static bool auto_explain_log_nested_statements = false; |
|
|
@ -113,6 +114,17 @@ _PG_init(void) |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
|
NULL); |
|
|
|
NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DefineCustomBoolVariable("auto_explain.log_triggers", |
|
|
|
|
|
|
|
"Include trigger statistics in plans.", |
|
|
|
|
|
|
|
"This has no effect unless log_analyze is also set.", |
|
|
|
|
|
|
|
&auto_explain_log_triggers, |
|
|
|
|
|
|
|
false, |
|
|
|
|
|
|
|
PGC_SUSET, |
|
|
|
|
|
|
|
0, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
NULL, |
|
|
|
|
|
|
|
NULL); |
|
|
|
|
|
|
|
|
|
|
|
DefineCustomEnumVariable("auto_explain.log_format", |
|
|
|
DefineCustomEnumVariable("auto_explain.log_format", |
|
|
|
"EXPLAIN format to be used for plan logging.", |
|
|
|
"EXPLAIN format to be used for plan logging.", |
|
|
|
NULL, |
|
|
|
NULL, |
|
|
@ -295,6 +307,8 @@ explain_ExecutorEnd(QueryDesc *queryDesc) |
|
|
|
ExplainBeginOutput(&es); |
|
|
|
ExplainBeginOutput(&es); |
|
|
|
ExplainQueryText(&es, queryDesc); |
|
|
|
ExplainQueryText(&es, queryDesc); |
|
|
|
ExplainPrintPlan(&es, queryDesc); |
|
|
|
ExplainPrintPlan(&es, queryDesc); |
|
|
|
|
|
|
|
if (es.analyze && auto_explain_log_triggers) |
|
|
|
|
|
|
|
ExplainPrintTriggers(&es, queryDesc); |
|
|
|
ExplainEndOutput(&es); |
|
|
|
ExplainEndOutput(&es); |
|
|
|
|
|
|
|
|
|
|
|
/* Remove last line break */ |
|
|
|
/* Remove last line break */ |
|
|
|