Hello,

Pursuant to my comments in [1], I attach a patch that restricts the use
of translated process types as indicated in $SUBJECT.  This adds a
separate column to the process type list, mostly extracted from Euler's
patch, not marked for translation, and uses it in a couple of places.
I think this is more reasonable.  I chose to CC Heikki here because the
business with translating these strings was, as I recall, his doing ...

[1] https://postgr.es/m/[email protected]


-- 
Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/
"No tengo por qué estar de acuerdo con lo que pienso"
                             (Carlos Caszeli)
>From fc5805ae107eb9d477b69f4ef9bc3819de3bf9f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]>
Date: Wed, 10 Dec 2025 10:59:48 +0100
Subject: [PATCH 1/2] add name column to proctypes

---
 src/backend/postmaster/launch_backend.c |  2 +-
 src/backend/utils/init/miscinit.c       |  2 +-
 src/include/postmaster/proctypelist.h   | 43 ++++++++++++-------------
 3 files changed, 22 insertions(+), 25 deletions(-)

diff --git a/src/backend/postmaster/launch_backend.c b/src/backend/postmaster/launch_backend.c
index 98f7c4848c9..6296ef1a1e3 100644
--- a/src/backend/postmaster/launch_backend.c
+++ b/src/backend/postmaster/launch_backend.c
@@ -179,7 +179,7 @@ typedef struct
 } child_process_kind;
 
 static child_process_kind child_process_kinds[] = {
-#define PG_PROCTYPE(bktype, description, main_func, shmem_attach) \
+#define PG_PROCTYPE(bktype, name, description, main_func, shmem_attach) \
 	[bktype] = {description, main_func, shmem_attach},
 #include "postmaster/proctypelist.h"
 #undef PG_PROCTYPE
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index fec79992c8d..4199f69ccdd 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -266,7 +266,7 @@ GetBackendTypeDesc(BackendType backendType)
 
 	switch (backendType)
 	{
-#define PG_PROCTYPE(bktype, description, main_func, shmem_attach)	\
+#define PG_PROCTYPE(bktype, name, description, main_func, shmem_attach)	\
 		case bktype: backendDesc = description; break;
 #include "postmaster/proctypelist.h"
 #undef PG_PROCTYPE
diff --git a/src/include/postmaster/proctypelist.h b/src/include/postmaster/proctypelist.h
index 242862451d8..0d39c001873 100644
--- a/src/include/postmaster/proctypelist.h
+++ b/src/include/postmaster/proctypelist.h
@@ -25,27 +25,24 @@
  */
 
 /*
- * List of process types (symbol, description, Main function, shmem_attach)
- * entries.
+ * List of process type entries:
+ * bktype, bkname, description, main_func, shmem_attach
  */
-
-
-/* bktype, description, main_func, shmem_attach */
-PG_PROCTYPE(B_ARCHIVER, gettext_noop("archiver"), PgArchiverMain, true)
-PG_PROCTYPE(B_AUTOVAC_LAUNCHER, gettext_noop("autovacuum launcher"), AutoVacLauncherMain, true)
-PG_PROCTYPE(B_AUTOVAC_WORKER, gettext_noop("autovacuum worker"), AutoVacWorkerMain, true)
-PG_PROCTYPE(B_BACKEND, gettext_noop("client backend"), BackendMain, true)
-PG_PROCTYPE(B_BG_WORKER, gettext_noop("background worker"), BackgroundWorkerMain, true)
-PG_PROCTYPE(B_BG_WRITER, gettext_noop("background writer"), BackgroundWriterMain, true)
-PG_PROCTYPE(B_CHECKPOINTER, gettext_noop("checkpointer"), CheckpointerMain, true)
-PG_PROCTYPE(B_DEAD_END_BACKEND, gettext_noop("dead-end client backend"), BackendMain, true)
-PG_PROCTYPE(B_INVALID, gettext_noop("unrecognized"), NULL, false)
-PG_PROCTYPE(B_IO_WORKER, gettext_noop("io worker"), IoWorkerMain, true)
-PG_PROCTYPE(B_LOGGER, gettext_noop("syslogger"), SysLoggerMain, false)
-PG_PROCTYPE(B_SLOTSYNC_WORKER, gettext_noop("slotsync worker"), ReplSlotSyncWorkerMain, true)
-PG_PROCTYPE(B_STANDALONE_BACKEND, gettext_noop("standalone backend"), NULL, false)
-PG_PROCTYPE(B_STARTUP, gettext_noop("startup"), StartupProcessMain, true)
-PG_PROCTYPE(B_WAL_RECEIVER, gettext_noop("walreceiver"), WalReceiverMain, true)
-PG_PROCTYPE(B_WAL_SENDER, gettext_noop("walsender"), NULL, true)
-PG_PROCTYPE(B_WAL_SUMMARIZER, gettext_noop("walsummarizer"), WalSummarizerMain, true)
-PG_PROCTYPE(B_WAL_WRITER, gettext_noop("walwriter"), WalWriterMain, true)
+PG_PROCTYPE(B_ARCHIVER, "archiver", gettext_noop("archiver"), PgArchiverMain, true)
+PG_PROCTYPE(B_AUTOVAC_LAUNCHER, "autovacuum", gettext_noop("autovacuum launcher"), AutoVacLauncherMain, true)
+PG_PROCTYPE(B_AUTOVAC_WORKER, "autovacuum", gettext_noop("autovacuum worker"), AutoVacWorkerMain, true)
+PG_PROCTYPE(B_BACKEND, "backend", gettext_noop("client backend"), BackendMain, true)
+PG_PROCTYPE(B_BG_WORKER, "bgworker", gettext_noop("background worker"), BackgroundWorkerMain, true)
+PG_PROCTYPE(B_BG_WRITER, "bgwriter", gettext_noop("background writer"), BackgroundWriterMain, true)
+PG_PROCTYPE(B_CHECKPOINTER, "checkpointer", gettext_noop("checkpointer"), CheckpointerMain, true)
+PG_PROCTYPE(B_DEAD_END_BACKEND, "backend", gettext_noop("dead-end client backend"), BackendMain, true)
+PG_PROCTYPE(B_INVALID, "postmaster", gettext_noop("unrecognized"), NULL, false)
+PG_PROCTYPE(B_IO_WORKER, "ioworker", gettext_noop("io worker"), IoWorkerMain, true)
+PG_PROCTYPE(B_LOGGER, "syslogger", gettext_noop("syslogger"), SysLoggerMain, false)
+PG_PROCTYPE(B_SLOTSYNC_WORKER, "slotsyncworker", gettext_noop("slotsync worker"), ReplSlotSyncWorkerMain, true)
+PG_PROCTYPE(B_STANDALONE_BACKEND, "backend", gettext_noop("standalone backend"), NULL, false)
+PG_PROCTYPE(B_STARTUP, "startup", gettext_noop("startup"), StartupProcessMain, true)
+PG_PROCTYPE(B_WAL_RECEIVER, "walreceiver", gettext_noop("walreceiver"), WalReceiverMain, true)
+PG_PROCTYPE(B_WAL_SENDER, "walsender", gettext_noop("walsender"), NULL, true)
+PG_PROCTYPE(B_WAL_SUMMARIZER, "walsummarizer", gettext_noop("walsummarizer"), WalSummarizerMain, true)
+PG_PROCTYPE(B_WAL_WRITER, "walwriter", gettext_noop("walwriter"), WalWriterMain, true)
-- 
2.47.3

>From 165b5936200015a90b9d12441be94f7368d32e4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]>
Date: Wed, 10 Dec 2025 11:18:36 +0100
Subject: [PATCH 2/2] use the backend name in a couple of places

---
 src/backend/tcop/backend_startup.c |  2 +-
 src/backend/utils/error/elog.c     |  2 +-
 src/backend/utils/init/miscinit.c  | 18 ++++++++++++++++++
 src/backend/utils/misc/ps_status.c |  2 +-
 src/include/miscadmin.h            |  1 +
 5 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/backend/tcop/backend_startup.c b/src/backend/tcop/backend_startup.c
index 14d5fc0b196..bed0ca28d1c 100644
--- a/src/backend/tcop/backend_startup.c
+++ b/src/backend/tcop/backend_startup.c
@@ -377,7 +377,7 @@ BackendInitialize(ClientSocket *client_sock, CAC_state cac)
 	 */
 	initStringInfo(&ps_data);
 	if (am_walsender)
-		appendStringInfo(&ps_data, "%s ", GetBackendTypeDesc(B_WAL_SENDER));
+		appendStringInfo(&ps_data, "%s ", GetBackendTypeName(B_WAL_SENDER));
 	appendStringInfo(&ps_data, "%s ", port->user_name);
 	if (port->database_name[0] != '\0')
 		appendStringInfo(&ps_data, "%s ", port->database_name);
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 4c5a9283208..72e76dbcdfd 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2781,7 +2781,7 @@ get_backend_type_for_log(void)
 	else if (MyBackendType == B_BG_WORKER)
 		backend_type_str = MyBgworkerEntry->bgw_type;
 	else
-		backend_type_str = GetBackendTypeDesc(MyBackendType);
+		backend_type_str = GetBackendTypeName(MyBackendType);
 
 	return backend_type_str;
 }
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index 4199f69ccdd..62f087d0bd9 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -274,6 +274,24 @@ GetBackendTypeDesc(BackendType backendType)
 	return backendDesc;
 }
 
+/*
+ * Return the non-translated, short name of a BackendType.
+ */
+const char *
+GetBackendTypeName(BackendType backendType)
+{
+	const char *backendName = "unknown";
+
+	switch (backendType)
+	{
+#define PG_PROCTYPE(bktype, name, description, main_fun, shmem_attach) \
+		case bktype: backendName = name; break;
+#include "postmaster/proctypelist.h"
+#undef PG_PROCTYPE
+	}
+	return backendName;
+}
+
 /* ----------------------------------------------------------------
  *				database path / name support stuff
  * ----------------------------------------------------------------
diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c
index 5d8de92a57b..acefd1204d3 100644
--- a/src/backend/utils/misc/ps_status.c
+++ b/src/backend/utils/misc/ps_status.c
@@ -290,7 +290,7 @@ init_ps_display(const char *fixed_part)
 
 	Assert(fixed_part || MyBackendType);
 	if (!fixed_part)
-		fixed_part = GetBackendTypeDesc(MyBackendType);
+		fixed_part = GetBackendTypeName(MyBackendType);
 
 #ifndef PS_USE_NONE
 	/* no ps display for stand-alone backend */
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 9a7d733ddef..42d6af748ec 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -406,6 +406,7 @@ extern PGDLLIMPORT BackendType MyBackendType;
 	(backend_type == B_BACKEND || backend_type == B_WAL_SENDER)
 
 extern const char *GetBackendTypeDesc(BackendType backendType);
+extern const char *GetBackendTypeName(BackendType backendType);
 
 extern void SetDatabasePath(const char *path);
 extern void checkDataDir(void);
-- 
2.47.3

Reply via email to