Add log_line_prefix placeholder %e to contain the current SQL state
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 3 Jul 2009 19:14:25 +0000 (19:14 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 3 Jul 2009 19:14:25 +0000 (19:14 +0000)
Author: Guillaume Smet <guillaume.smet@gmail.com>

doc/src/sgml/config.sgml
src/backend/utils/error/elog.c
src/backend/utils/misc/postgresql.conf.sample

index bb308039d1b3cd4fb50fdb5af51acf4d04dd57d5..99d25d7687464dfa8f0ff764eb0f95f5a2d515fb 100644 (file)
@@ -3043,6 +3043,11 @@ local0.*    /var/log/postgresql
              <entry>Command tag: type of session's current command</entry>
              <entry>yes</entry>
             </row>
+            <row>
+             <entry><literal>%e</literal></entry>
+             <entry>SQL state</entry>
+             <entry>no</entry>
+            </row>
             <row>
              <entry><literal>%c</literal></entry>
              <entry>Session ID: see below</entry>
index 1c377e886f7d670c9e8409cf9ee29f439acc3979..9e25da1f2ac65bfe6aa8d2578058f89a24a52292 100644 (file)
@@ -144,7 +144,7 @@ static char formatted_log_time[FORMATTED_TS_LEN];
        } while (0)
 
 
-static void log_line_prefix(StringInfo buf);
+static void log_line_prefix(StringInfo buf, ErrorData *edata);
 static void send_message_to_server_log(ErrorData *edata);
 static void send_message_to_frontend(ErrorData *edata);
 static char *expand_fmt_string(const char *fmt, ErrorData *edata);
@@ -1677,7 +1677,7 @@ setup_formatted_start_time(void)
  * Format tag info for log lines; append to the provided buffer.
  */
 static void
-log_line_prefix(StringInfo buf)
+log_line_prefix(StringInfo buf, ErrorData *edata)
 {
        /* static counter for line numbers */
        static long log_line_number = 0;
@@ -1814,6 +1814,9 @@ log_line_prefix(StringInfo buf)
                        case 'x':
                                appendStringInfo(buf, "%u", GetTopTransactionIdIfAny());
                                break;
+                       case 'e':
+                               appendStringInfoString(buf, unpack_sql_state(edata->sqlerrcode));
+                               break;
                        case '%':
                                appendStringInfoChar(buf, '%');
                                break;
@@ -2070,7 +2073,7 @@ send_message_to_server_log(ErrorData *edata)
 
        formatted_log_time[0] = '\0';
 
-       log_line_prefix(&buf);
+       log_line_prefix(&buf, edata);
        appendStringInfo(&buf, "%s:  ", error_severity(edata->elevel));
 
        if (Log_error_verbosity >= PGERROR_VERBOSE)
@@ -2094,35 +2097,35 @@ send_message_to_server_log(ErrorData *edata)
        {
                if (edata->detail_log)
                {
-                       log_line_prefix(&buf);
+                       log_line_prefix(&buf, edata);
                        appendStringInfoString(&buf, _("DETAIL:  "));
                        append_with_tabs(&buf, edata->detail_log);
                        appendStringInfoChar(&buf, '\n');
                }
                else if (edata->detail)
                {
-                       log_line_prefix(&buf);
+                       log_line_prefix(&buf, edata);
                        appendStringInfoString(&buf, _("DETAIL:  "));
                        append_with_tabs(&buf, edata->detail);
                        appendStringInfoChar(&buf, '\n');
                }
                if (edata->hint)
                {
-                       log_line_prefix(&buf);
+                       log_line_prefix(&buf, edata);
                        appendStringInfoString(&buf, _("HINT:  "));
                        append_with_tabs(&buf, edata->hint);
                        appendStringInfoChar(&buf, '\n');
                }
                if (edata->internalquery)
                {
-                       log_line_prefix(&buf);
+                       log_line_prefix(&buf, edata);
                        appendStringInfoString(&buf, _("QUERY:  "));
                        append_with_tabs(&buf, edata->internalquery);
                        appendStringInfoChar(&buf, '\n');
                }
                if (edata->context)
                {
-                       log_line_prefix(&buf);
+                       log_line_prefix(&buf, edata);
                        appendStringInfoString(&buf, _("CONTEXT:  "));
                        append_with_tabs(&buf, edata->context);
                        appendStringInfoChar(&buf, '\n');
@@ -2132,14 +2135,14 @@ send_message_to_server_log(ErrorData *edata)
                        /* assume no newlines in funcname or filename... */
                        if (edata->funcname && edata->filename)
                        {
-                               log_line_prefix(&buf);
+                               log_line_prefix(&buf, edata);
                                appendStringInfo(&buf, _("LOCATION:  %s, %s:%d\n"),
                                                                 edata->funcname, edata->filename,
                                                                 edata->lineno);
                        }
                        else if (edata->filename)
                        {
-                               log_line_prefix(&buf);
+                               log_line_prefix(&buf, edata);
                                appendStringInfo(&buf, _("LOCATION:  %s:%d\n"),
                                                                 edata->filename, edata->lineno);
                        }
@@ -2153,7 +2156,7 @@ send_message_to_server_log(ErrorData *edata)
                debug_query_string != NULL &&
                !edata->hide_stmt)
        {
-               log_line_prefix(&buf);
+               log_line_prefix(&buf, edata);
                appendStringInfoString(&buf, _("STATEMENT:  "));
                append_with_tabs(&buf, debug_query_string);
                appendStringInfoChar(&buf, '\n');
index 3f7b43f0ccc54d0a966a886a575d4cc32cb61217..c1b888c0d4663088fbd3f40f6949316a5583c13f 100644 (file)
                                        #   %t = timestamp without milliseconds
                                        #   %m = timestamp with milliseconds
                                        #   %i = command tag
+                                       #   %e = SQL state
                                        #   %c = session ID
                                        #   %l = session line number
                                        #   %s = session start timestamp