从数据目录重新定位 postgres.conf 路径后如何更新它

从数据目录重新定位 postgres.conf 路径后如何更新它

我正在安装一个Postgresql-9.4 HA环境RHEL 7,当我初始化 postgres db 时,它会创建一个数据目录,并在数据目录中包含postgresql.conf文件pg_hba.conf。在这里,我预计在数据目录中创建配置文件会产生冲突,因为它在主复制期间被覆盖。

因此,我尝试从数据目录中重新定位postgres.conf和文件,并使用重新定位的配置文件。在哪里更新配置文件的路径?pg_hba.confpostgres service

更新:我已经更新了 PGDATA 以/usr/lib/systemd/system/postgresql-9.4.service指向重新定位的conf 文件。在新的 postgres.conf 文件中,更新了数据目录和 hba_file 路径。我尝试重新启动服务,然后返回错误

Job for postgresql-9.4.service failed. See 'systemctl status postgresql-9.4.service' and 'journalctl -xn' for details.

答案1

最近,我遇到了同样的问题。真正的问题是如何告诉 postmaster 其真实的配置文件位置。我们所要做的就是将-c config_file <configuration/filename/location>命令行选项添加到 postgres 进程。问题是:如何做到这一点......?

很久以前,在一个遥远的星系,我们有 System V 初始化脚本,我们可以在位于某个位置的某个文件中配置命令行选项; /etc/sysconfig 目录。但现在,我们有了 systemd - 强大、先进且......难以配置的机器来完成所有工作甚至更多。所以,分割配置文件和数据文件的唯一方法是配置postgresql systemd init系统。如何实现这一目标?这就是我所做的:

  1. 首先,我将配置文件:postgresql.conf、pg_hba.conf 和 pg_ident.conf 移动到外部目录中,比方说:/var/lib/pgsql/config

  2. 我在 postgresql.conf 中配置了上述文件的新位置:

     hba_file = '/var/lib/pgsql/config/pg_hba.conf'
     ident_file = '/var/lib/pgsql/config/pg_ident.conf'
    
  3. 我通过覆盖现有(系统)配置来编辑 systemd postgresql.service:

    systemctl edit postgresql.service
    

    这会导致创建新的空 systemd 服务文件: /etc/systemd/system/postgresql.service.d/override.conf 并在 $EDITOR 编辑器中打开它。

  4. 我放在那里:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT} -c config_file=/var/lib/pgsql/config/postgresql.conf" -w -t 300
    

    正如我们所看到的 - 我在 -o 参数中添加了:“-c config_file /var/lib/pgsql/config/postgresql.conf”字符串。另一个有趣的点是空:“ExecStart”指令。虽然它被称为:“覆盖”,但我们必须首先将此指令归零,否则,我们将收到错误:“postgresql.service 有多个 ExecStart= 设置...”。

  5. 重新启动服务: systemctl restart postgresql

    我很喜欢 Postgresql,它的数据文件位于 $PGDATA 中,配置文件位于其他地方:

    /usr/bin/postgres -D /var/lib/pgsql/data -p 5432 -c config_file=/var/lib/pgsql/config/postgresql.conf
    

我用 CentOS 7 和 RHEL7 做了这个,但希望它能在任何基于 systemd 的操作系统中工作。

希望这个故事对某人有所帮助。

问候。

答案2

我发现了这一页在Postgresql官方网站上,详细说明:

如果您希望将配置文件保留在数据目录之外的其他位置,则 postgres -D 命令行选项或 PGDATA 环境变量必须指向包含配置文件的目录,并且必须在 postgresql.conf 中设置 data_directory 参数(或在命令行)来显示数据目录的实际位置。请注意,data_directory 会覆盖数据目录位置的 -D 和 PGDATA,但不会覆盖配置文件的位置。

如果您愿意,您可以使用参数 config_file、hba_file 和/或 ident_file 单独指定配置文件名称和位置。 config_file 只能在 postgres 命令行上指定,但其他的可以在主配置文件中设置。如果显式设置了所有三个参数加上 data_directory,则无需指定 -D 或 PGDATA。

当设置任何这些参数时,相对路径将被解释为相对于 postgres 启动的目录。

echo $PGDATA你的主机上的输出是什么?

相关内容