Make sure that debug_query_string contains the original query text,

if available (which it usually should be), during processing of Bind
and Execute protocol messages.  This improves usefulness of
log_min_error_statement logging for extended query protocol.
This commit is contained in:
Tom Lane 2006-10-19 19:52:22 +00:00
parent def651f48f
commit 681892208f
1 changed files with 24 additions and 24 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.515 2006/10/08 17:45:50 momjian Exp $ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.516 2006/10/19 19:52:22 tgl Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
@ -1326,9 +1326,9 @@ exec_bind_message(StringInfo input_message)
/* /*
* Report query to various monitoring facilities. * Report query to various monitoring facilities.
*/ */
debug_query_string = "bind message"; debug_query_string = pstmt->query_string ? pstmt->query_string : "<BIND>";
pgstat_report_activity(pstmt->query_string ? pstmt->query_string : "<BIND>"); pgstat_report_activity(debug_query_string);
set_ps_display("BIND", false); set_ps_display("BIND", false);
@ -1680,29 +1680,9 @@ exec_execute_message(const char *portal_name, long max_rows)
return; return;
} }
/*
* Report query to various monitoring facilities.
*/
debug_query_string = "execute message";
pgstat_report_activity(portal->sourceText ? portal->sourceText : "<EXECUTE>");
set_ps_display(portal->commandTag, false);
if (save_log_statement_stats)
ResetUsage();
/* Does the portal contain a transaction command? */ /* Does the portal contain a transaction command? */
is_xact_command = IsTransactionStmtList(portal->parseTrees); is_xact_command = IsTransactionStmtList(portal->parseTrees);
/*
* If we re-issue an Execute protocol request against an existing portal,
* then we are only fetching more rows rather than completely re-executing
* the query from the start. atStart is never reset for a v3 portal, so we
* are safe to use this check.
*/
execute_is_fetch = !portal->atStart;
/* /*
* We must copy the sourceText and prepStmtName into MessageContext in * We must copy the sourceText and prepStmtName into MessageContext in
* case the portal is destroyed during finish_xact_command. Can avoid the * case the portal is destroyed during finish_xact_command. Can avoid the
@ -1710,7 +1690,7 @@ exec_execute_message(const char *portal_name, long max_rows)
*/ */
if (is_xact_command) if (is_xact_command)
{ {
sourceText = pstrdup(portal->sourceText); sourceText = portal->sourceText ? pstrdup(portal->sourceText) : NULL;
if (portal->prepStmtName) if (portal->prepStmtName)
prepStmtName = pstrdup(portal->prepStmtName); prepStmtName = pstrdup(portal->prepStmtName);
else else
@ -1732,6 +1712,18 @@ exec_execute_message(const char *portal_name, long max_rows)
portalParams = portal->portalParams; portalParams = portal->portalParams;
} }
/*
* Report query to various monitoring facilities.
*/
debug_query_string = sourceText ? sourceText : "<EXECUTE>";
pgstat_report_activity(debug_query_string);
set_ps_display(portal->commandTag, false);
if (save_log_statement_stats)
ResetUsage();
BeginCommand(portal->commandTag, dest); BeginCommand(portal->commandTag, dest);
/* /*
@ -1746,6 +1738,14 @@ exec_execute_message(const char *portal_name, long max_rows)
*/ */
start_xact_command(); start_xact_command();
/*
* If we re-issue an Execute protocol request against an existing portal,
* then we are only fetching more rows rather than completely re-executing
* the query from the start. atStart is never reset for a v3 portal, so we
* are safe to use this check.
*/
execute_is_fetch = !portal->atStart;
/* Log immediately if dictated by log_statement */ /* Log immediately if dictated by log_statement */
if (check_log_statement_cooked(portal->parseTrees)) if (check_log_statement_cooked(portal->parseTrees))
{ {