Commit 5bd59b9c authored by Bruce Momjian's avatar Bruce Momjian

Document that errors are not output by log_statement (was they were in

8.0), and add as suggestion to use log_min_error_statement for this
purpose.  I also fixed the code so the first EXECUTE has it's prepare,
rather than the last which is what was in the current code.  Also remove
"protocol" prefix for SQL EXECUTE output because it is not accurate.

Backpatch to 8.1.X.
parent 0a873949
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.52 2006/03/10 19:10:47 momjian Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.53 2006/04/18 00:52:22 momjian Exp $ -->
<chapter Id="runtime-config"> <chapter Id="runtime-config">
<title>Server Configuration</title> <title>Server Configuration</title>
...@@ -2758,9 +2758,10 @@ SELECT * FROM parent WHERE key = 2400; ...@@ -2758,9 +2758,10 @@ SELECT * FROM parent WHERE key = 2400;
<note> <note>
<para> <para>
The <command>EXECUTE</command> statement is not considered a The <command>EXECUTE</command> statement is not considered a
<literal>ddl</> or <literal>mod</> statement. When it is logged, <literal>ddl</> or <literal>mod</> statement. Statements that
only the name of the prepared statement is reported, not the generate errors are not logged. Set
actual prepared statement. <varname>log_min_error_statement</> to <literal>error</> to
log such statements.
</para> </para>
<para> <para>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.483 2006/04/04 19:35:35 tgl Exp $ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.484 2006/04/18 00:52:23 momjian Exp $
* *
* NOTES * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
...@@ -586,19 +586,21 @@ log_after_parse(List *raw_parsetree_list, const char *query_string, ...@@ -586,19 +586,21 @@ log_after_parse(List *raw_parsetree_list, const char *query_string,
/* /*
* For the first EXECUTE we find, record the client statement used by * For the first EXECUTE we find, record the client statement used by
* the PREPARE. * the PREPARE. PREPARE doesn't save the parse tree so we have no
* way to conditionally output based on the type of query prepared.
*/ */
if (IsA(parsetree, ExecuteStmt)) if (IsA(parsetree, ExecuteStmt))
{ {
ExecuteStmt *stmt = (ExecuteStmt *) parsetree; ExecuteStmt *stmt = (ExecuteStmt *) parsetree;
PreparedStatement *entry; PreparedStatement *entry;
if ((entry = FetchPreparedStatement(stmt->name, false)) != NULL && if (*prepare_string == NULL &&
(entry = FetchPreparedStatement(stmt->name, false)) != NULL &&
entry->query_string) entry->query_string)
{ {
*prepare_string = palloc(strlen(entry->query_string) + *prepare_string = palloc(strlen(entry->query_string) +
strlen(" [protocol PREPARE: %s]") - 1); strlen(" [PREPARE: %s]") - 2 + 1);
sprintf(*prepare_string, " [protocol PREPARE: %s]", sprintf(*prepare_string, " [PREPARE: %s]",
entry->query_string); entry->query_string);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment