Currently, our session id, displayed by log_line_prefix and CSV output,
is made up of the session start time epoch seconds and the process id. 
The problem is that the printf mask is currently %lx.%x, causing a
process id less than 4096 to not display a full four hex digits after
the decimal point.  I think this is confusing because the number .423
appears higher than .1423, though it is not.  Here is what our current
output looks like with log_line_prefix="%c: ":

        50785b3e.7ff9: ERROR:  syntax error at or near "test" at character 1
        50785b3e.7ff9: STATEMENT:  test
        50785b3e.144: ERROR:  syntax error at or near "test" at character 1
        50785b3e.144: STATEMENT:  test

With my fix, here is the updated output:

        507864d3.7ff2: ERROR:  syntax error at or near "test" at character 1
        507864d3.7ff2: STATEMENT:  test
        507864d3.013d: ERROR:  syntax error at or near "test" at character 1
        507864d3.013d: STATEMENT:  test

Patch attached.

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
new file mode 100644
index a40b343..68b7ab3
*** a/src/backend/utils/error/elog.c
--- b/src/backend/utils/error/elog.c
*************** log_line_prefix(StringInfo buf, ErrorDat
*** 1970,1976 ****
  				}
  				break;
  			case 'c':
! 				appendStringInfo(buf, "%lx.%x", (long) (MyStartTime), MyProcPid);
  				break;
  			case 'p':
  				appendStringInfo(buf, "%d", MyProcPid);
--- 1970,1976 ----
  				}
  				break;
  			case 'c':
! 				appendStringInfo(buf, "%lx.%04x", (long) (MyStartTime), MyProcPid);
  				break;
  			case 'p':
  				appendStringInfo(buf, "%d", MyProcPid);
*************** write_csvlog(ErrorData *edata)
*** 2149,2155 ****
  	appendStringInfoChar(&buf, ',');
  
  	/* session id */
! 	appendStringInfo(&buf, "%lx.%x", (long) MyStartTime, MyProcPid);
  	appendStringInfoChar(&buf, ',');
  
  	/* Line number */
--- 2149,2155 ----
  	appendStringInfoChar(&buf, ',');
  
  	/* session id */
! 	appendStringInfo(&buf, "%lx.%04x", (long) MyStartTime, MyProcPid);
  	appendStringInfoChar(&buf, ',');
  
  	/* Line number */
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to