Attached is a demo patch that adds a placeholder %b for log_line_prefix
(not in the default setting) that contains the backend type, the same
that you see in pg_stat_activity and in the ps status. I would have
found this occasionally useful when analyzing logs, especially if you
have a lot of background workers active. Thoughts?
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From 3cb15882f671c8d37cb0f844ce62d1853870875c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Wed, 12 Feb 2020 22:04:29 +0100
Subject: [PATCH] Add backend type placeholder to log_line_prefix
---
doc/src/sgml/config.sgml | 5 +++++
src/backend/bootstrap/bootstrap.c | 2 +-
src/backend/postmaster/autovacuum.c | 4 ++--
src/backend/postmaster/bgworker.c | 2 +-
src/backend/postmaster/pgarch.c | 2 +-
src/backend/postmaster/pgstat.c | 2 +-
src/backend/postmaster/postmaster.c | 9 ++++++++-
src/backend/postmaster/syslogger.c | 2 +-
src/backend/utils/error/elog.c | 6 ++++++
src/backend/utils/init/globals.c | 2 ++
src/include/miscadmin.h | 2 ++
src/test/regress/pg_regress.c | 2 +-
12 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index c1128f89ec..9c068f3903 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -6470,6 +6470,11 @@ <title>What to Log</title>
<entry>Application name</entry>
<entry>yes</entry>
</row>
+ <row>
+ <entry><literal>%b</literal></entry>
+ <entry>Backend process type</entry>
+ <entry>yes</entry>
+ </row>
<row>
<entry><literal>%u</literal></entry>
<entry>User name</entry>
diff --git a/src/backend/bootstrap/bootstrap.c
b/src/backend/bootstrap/bootstrap.c
index bfc629c753..1c559851b4 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -342,7 +342,7 @@ AuxiliaryProcessMain(int argc, char *argv[])
statmsg = "??? process";
break;
}
- init_ps_display(statmsg, "", "", "");
+ init_ps_display((backend_type_str = statmsg), "", "", "");
}
/* Acquire configuration parameters, unless inherited from postmaster */
diff --git a/src/backend/postmaster/autovacuum.c
b/src/backend/postmaster/autovacuum.c
index 6d1f28c327..d50d4b9b02 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -434,7 +434,7 @@ AutoVacLauncherMain(int argc, char *argv[])
am_autovacuum_launcher = true;
/* Identify myself via ps */
- init_ps_display(pgstat_get_backend_desc(B_AUTOVAC_LAUNCHER), "", "",
"");
+ init_ps_display((backend_type_str =
pgstat_get_backend_desc(B_AUTOVAC_LAUNCHER)), "", "", "");
ereport(DEBUG1,
(errmsg("autovacuum launcher started")));
@@ -1507,7 +1507,7 @@ AutoVacWorkerMain(int argc, char *argv[])
am_autovacuum_worker = true;
/* Identify myself via ps */
- init_ps_display(pgstat_get_backend_desc(B_AUTOVAC_WORKER), "", "", "");
+ init_ps_display((backend_type_str =
pgstat_get_backend_desc(B_AUTOVAC_WORKER)), "", "", "");
SetProcessingMode(InitProcessing);
diff --git a/src/backend/postmaster/bgworker.c
b/src/backend/postmaster/bgworker.c
index 75fc0d5d33..105b755c50 100644
--- a/src/backend/postmaster/bgworker.c
+++ b/src/backend/postmaster/bgworker.c
@@ -689,7 +689,7 @@ StartBackgroundWorker(void)
IsBackgroundWorker = true;
/* Identify myself via ps */
- init_ps_display(worker->bgw_name, "", "", "");
+ init_ps_display((backend_type_str = worker->bgw_name), "", "", "");
/*
* If we're not supposed to have shared memory access, then detach from
diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c
index 3ca30badb2..cd4f8b6392 100644
--- a/src/backend/postmaster/pgarch.c
+++ b/src/backend/postmaster/pgarch.c
@@ -241,7 +241,7 @@ PgArchiverMain(int argc, char *argv[])
/*
* Identify myself via ps
*/
- init_ps_display("archiver", "", "", "");
+ init_ps_display((backend_type_str = "archiver"), "", "", "");
pgarch_MainLoop();
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 7169509a79..8d48abfe1e 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -4447,7 +4447,7 @@ PgstatCollectorMain(int argc, char *argv[])
/*
* Identify myself via ps
*/
- init_ps_display("stats collector", "", "", "");
+ init_ps_display((backend_type_str = "stats collector"), "", "", "");
/*
* Read in existing stats files or initialize the stats to zero.
diff --git a/src/backend/postmaster/postmaster.c
b/src/backend/postmaster/postmaster.c
index b3986bee75..f0aba28655 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -579,6 +579,8 @@ PostmasterMain(int argc, char *argv[])
IsPostmasterEnvironment = true;
+ backend_type_str = "postmaster";
+
/*
* We should not be creating any files or directories before we check
the
* data directory (see checkDataDir()), but just in case set the umask
to
@@ -2621,6 +2623,8 @@ InitProcessGlobals(void)
((uint64) MyStartTimestamp >> 20);
}
srandom(rseed);
+
+ backend_type_str = "uninitialized";
}
@@ -4422,11 +4426,14 @@ BackendInitialize(Port *port)
* init_ps_display() to avoid abusing the parameters like this.
*/
if (am_walsender)
- init_ps_display(pgstat_get_backend_desc(B_WAL_SENDER),
port->user_name, remote_ps_data,
+ init_ps_display((backend_type_str =
pgstat_get_backend_desc(B_WAL_SENDER)), port->user_name, remote_ps_data,
update_process_title ?
"authentication" : "");
else
+ {
+ backend_type_str = "client backend";
init_ps_display(port->user_name, port->database_name,
remote_ps_data,
update_process_title ?
"authentication" : "");
+ }
/*
* Disable the timeout, and prevent SIGTERM/SIGQUIT again.
diff --git a/src/backend/postmaster/syslogger.c
b/src/backend/postmaster/syslogger.c
index b2b69a7207..0b0ba949dc 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -179,7 +179,7 @@ SysLoggerMain(int argc, char *argv[])
am_syslogger = true;
- init_ps_display("logger", "", "", "");
+ init_ps_display((backend_type_str = "logger"), "", "", "");
/*
* If we restarted, our stderr is already redirected into our own input
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index f5b0211f66..2baa7aedff 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2492,6 +2492,12 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
padding > 0 ? padding : -padding);
break;
+ case 'b':
+ if (padding != 0)
+ appendStringInfo(buf, "%*s", padding,
backend_type_str);
+ else
+ appendStringInfoString(buf,
backend_type_str);
+ break;
case 'u':
if (MyProcPort)
{
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index eb19644419..f1f8e61507 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -78,6 +78,8 @@ char postgres_exec_path[MAXPGPATH]; /* full path to
backend */
/* note: currently this is not valid in backend processes */
#endif
+const char *backend_type_str;
+
BackendId MyBackendId = InvalidBackendId;
BackendId ParallelMasterBackendId = InvalidBackendId;
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index f985453ec3..9c9418e08a 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -178,6 +178,8 @@ extern char pkglib_path[];
extern char postgres_exec_path[];
#endif
+extern const char *backend_type_str;
+
/*
* done in storage/backendid.h for now.
*
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 92bd28dc5a..d9f8a74a19 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -2350,7 +2350,7 @@ regression_main(int argc, char *argv[], init_function
ifunc, test_function tfunc
fputs("\n# Configuration added by pg_regress\n\n", pg_conf);
fputs("log_autovacuum_min_duration = 0\n", pg_conf);
fputs("log_checkpoints = on\n", pg_conf);
- fputs("log_line_prefix = '%m [%p] %q%a '\n", pg_conf);
+ fputs("log_line_prefix = '%m %b[%p] %q%a '\n", pg_conf);
fputs("log_lock_waits = on\n", pg_conf);
fputs("log_temp_files = 128kB\n", pg_conf);
fputs("max_prepared_transactions = 2\n", pg_conf);
--
2.25.0