diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 4a33f87..0fd414e 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -681,6 +681,24 @@ include 'filename' + + cluster_name (string) + + cluster_name configuration parameter + + + + Sets the cluster name that appears in the process title for all + processes in this cluster. No name is shown if this parameter is set + to the empty string '' (which is the default). The + process title is typically viewed by the ps command, or in + Windows by using the Process Explorer. The cluster + name can also be included in the log_line_prefix. + This parameter can only be set at server start. + + + + tcp_keepalives_idle (integer) @@ -4212,6 +4230,11 @@ local0.* /var/log/postgresql + %C + Cluster name + no + + %a Application name yes diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 977fc66..0adfee7 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2345,6 +2345,12 @@ log_line_prefix(StringInfo buf, ErrorData *edata) else appendStringInfo(buf, "%lx.%x", (long) (MyStartTime), MyProcPid); break; + case 'C': + if (padding != 0) + appendStringInfo(buf, "%*s", padding, cluster_name); + else + appendStringInfoString(buf, cluster_name); + break; case 'p': if (padding != 0) appendStringInfo(buf, "%*d", padding, MyProcPid); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 15020c4..71897b8 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -449,6 +449,7 @@ int temp_file_limit = -1; int num_temp_buffers = 1024; +const char *cluster_name = ""; char *data_directory; char *ConfigFileName; char *HbaFileName; @@ -3091,6 +3092,17 @@ static struct config_string ConfigureNamesString[] = }, { + {"cluster_name", PGC_POSTMASTER, CONN_AUTH_SETTINGS, + gettext_noop("Sets the name of the cluster that appears in 'ps' output."), + NULL, + GUC_IS_NAME + }, + &cluster_name, + "", + NULL, NULL, NULL + }, + + { {"data_directory", PGC_POSTMASTER, FILE_LOCATIONS, gettext_noop("Sets the server's data directory."), NULL, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 70e5a51..8ad292a 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -74,6 +74,8 @@ # (change requires restart) #bonjour_name = '' # defaults to the computer name # (change requires restart) +#cluster_name = '' # defaults to the computer name + # (change requires restart) # - Security and Authentication - @@ -410,6 +412,7 @@ #log_error_verbosity = default # terse, default, or verbose messages #log_hostname = off #log_line_prefix = '' # special values: + # %C = cluster name # %a = application name # %u = user name # %d = database name diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c index 6294ca3..80a3fef 100644 --- a/src/backend/utils/misc/ps_status.c +++ b/src/backend/utils/misc/ps_status.c @@ -29,6 +29,7 @@ #include "libpq/libpq.h" #include "miscadmin.h" #include "utils/ps_status.h" +#include "utils/guc.h" extern char **environ; bool update_process_title = true; @@ -264,15 +265,24 @@ init_ps_display(const char *username, const char *dbname, * apparently setproctitle() already adds a `progname:' prefix to the ps * line */ - snprintf(ps_buffer, ps_buffer_size, - "%s %s %s ", - username, dbname, host_info); +#define PROGRAM_NAME_PREFIX "" #else - snprintf(ps_buffer, ps_buffer_size, - "postgres: %s %s %s ", - username, dbname, host_info); +#define PROGRAM_NAME_PREFIX "postgres: " #endif + if (*cluster_name == '\0') + { + snprintf(ps_buffer, ps_buffer_size, + PROGRAM_NAME_PREFIX "%s %s %s ", + username, dbname, host_info); + } + else + { + snprintf(ps_buffer, ps_buffer_size, + PROGRAM_NAME_PREFIX "%s %s %s %s ", + cluster_name, username, dbname, host_info); + } + ps_buffer_cur_len = ps_buffer_fixed_size = strlen(ps_buffer); set_ps_display(initial_str, true); diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index be68f35..4dd2c58 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -223,6 +223,7 @@ extern int temp_file_limit; extern int num_temp_buffers; +extern const char *cluster_name; extern char *data_directory; extern char *ConfigFileName; extern char *HbaFileName;