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

Reply via email to