From f57a2f5e03054ade221e554c70e628e1ffae1b66 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Apr 2021 22:30:30 -0400 Subject: [PATCH] Add csvlog output for the new query_id value This also adjusts the printf format for query id used by log_line_prefix (%Q). Reported-by: Justin Pryzby Discussion: https://postgr.es/m/20210408005402.GG24239@momjian.us Author: Julien Rouhaud, Bruce Momjian --- doc/src/sgml/config.sgml | 4 +++- doc/src/sgml/file-fdw.sgml | 3 ++- src/backend/utils/error/elog.c | 12 ++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 963824d0506..ea5cf3a2dc0 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7310,7 +7310,8 @@ log_line_prefix = '%m [%p] %q%u@%d/%a ' character count of the error position therein, location of the error in the PostgreSQL source code (if log_error_verbosity is set to verbose), - application name, backend type, and process ID of parallel group leader. + application name, backend type, process ID of parallel group leader, + and query id. Here is a sample table definition for storing CSV-format log output: @@ -7341,6 +7342,7 @@ CREATE TABLE postgres_log application_name text, backend_type text, leader_pid integer, + query_id bigint, PRIMARY KEY (session_id, session_line_num) ); diff --git a/doc/src/sgml/file-fdw.sgml b/doc/src/sgml/file-fdw.sgml index 2e21806f487..5b98782064f 100644 --- a/doc/src/sgml/file-fdw.sgml +++ b/doc/src/sgml/file-fdw.sgml @@ -266,7 +266,8 @@ CREATE FOREIGN TABLE pglog ( location text, application_name text, backend_type text, - leader_pid integer + leader_pid integer, + query_id bigint ) SERVER pglog OPTIONS ( filename 'log/pglog.csv', format 'csv' ); diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 1cf71a649b3..a1ebe06d5b0 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2716,11 +2716,11 @@ log_line_prefix(StringInfo buf, ErrorData *edata) break; case 'Q': if (padding != 0) - appendStringInfo(buf, "%*ld", padding, - pgstat_get_my_queryid()); + appendStringInfo(buf, "%*lld", padding, + (long long) pgstat_get_my_queryid()); else - appendStringInfo(buf, "%ld", - pgstat_get_my_queryid()); + appendStringInfo(buf, "%lld", + (long long) pgstat_get_my_queryid()); break; default: /* format error - ignore it */ @@ -2964,6 +2964,10 @@ write_csvlog(ErrorData *edata) if (leader && leader->pid != MyProcPid) appendStringInfo(&buf, "%d", leader->pid); } + appendStringInfoChar(&buf, ','); + + /* query id */ + appendStringInfo(&buf, "%lld", (long long) pgstat_get_my_queryid()); appendStringInfoChar(&buf, '\n');