更多"C/C++、PostgreSQL、编译原理、计算机原理、TCP/IP、数据结构&算法、Linux编程”等技术文章更新于公众号: 君子黎


1. 辅助进程自带前缀“postgres: ”

     在 【PostgreSQL教程】· SysLogger日志收集器工作原理 中的1.1.1节里分析了PostgreSQL内核中是如何为每个辅助进程创建进程名的原理过程。首先,它是在初始化每个进程的入口函数中,对应初始化 MyBackendType 变量,然后调用函数GetBackendTypeDesc()来获取对应的进程名。之后启动postmaster进程,得到的所有辅助进程名前面均带有“postmaster: ”前缀,如下图所示:

在这里插入图片描述

1.1 编译不带“postgres: ”前缀的辅助进程

     PostgreSQL内核源码中的init_ps_display()函数,会对运行的辅助进程添加了前缀操作,如下:

#if defined(PS_USE_SETPROCTITLE) || defined(PS_USE_SETPROCTITLE_FAST)

#define PROGRAM_NAME_PREFIX ""
#else
#define PROGRAM_NAME_PREFIX "postgres: "
#endif

if (*cluster_name == '\0')
    {
        snprintf(ps_buffer, ps_buffer_size,
                 PROGRAM_NAME_PREFIX "%s ",
                 fixed_part);
    }
    else
    {
        snprintf(ps_buffer, ps_buffer_size,
                 PROGRAM_NAME_PREFIX "%s: %s ",
                 cluster_name, fixed_part);
    }

     其中fixed_part是每个辅助进程的名字,通过snprintf指定的格式化之后,ps_buffer缓存中的数据即为: postgres: process_name。 比如是初始化logger日志辅助进程,则ps_buffer中的结果为 postgres: logger 。若想运行的postmaster服务中的辅助进程不带postgres前缀,则需要修改PostgreSQL内核源码中的ps_status.c文件。该文件位于src/backend/misc/ps_status.c。具体修改位置是init_ps_display()函数中的宏PROGRAM_NAME_PREFIX。修改之后,重新编译安装PostgreSQL。 即指向以下三步骤:

     (1) ./configure
     若最初选择了参数--prefix指定安装的位置,则这里也需要保持一致。

     (2) make -j

     (3) make install

     之后再重新启动postmaster进程,就可以看到辅助进程已经没有前缀了。如下图所示:

在这里插入图片描述

2. 为postmaster辅助进程添加自定义前缀

     默认的postmaster中所有辅助进程名都带有“postgres:”前缀,除此之外,你还可以在具体进程名,“postgres:”前缀之后添加自定义的前缀名字。直接上图看效果:

在这里插入图片描述

2.1 postgresql.conf配置文件中两个重要参数

     若想要为辅助进程名添加名字前缀,则需要同时开启以下两个配置参数,分别是:

     (1) update_process_title,配置为on,则表示开启该功能,反之off,则不停用。
     (2) cluster_name 自定义辅助进程前缀名。此处我填写为: cluster_name = 'lixiaogang5'。默认为空,即cluster_name = ''。

##################################### postgresql.conf配置文件 #####################
#------------------------------------------------------------------------------
# PROCESS TITLE
#------------------------------------------------------------------------------

#cluster_name = ''                       # added to process titles if nonempty
 cluster_name = 'lixiaogang5'                                        # (change requires restart)
update_process_title = on

     当postmaster服务运行时修改,则需要重启生效。