无法在 Ubuntu 22 上使用 systemd 服务覆盖更改 Postgresql 数据目录

无法在 Ubuntu 22 上使用 systemd 服务覆盖更改 Postgresql 数据目录

我正在尝试更改 Postgres 用于查找其配置文件的数据目录。

我有 Ubuntu 22 的全新更新和新安装的 Postgresql@15。

为了维护对 Postgres 配置文件的版本控制,我已将默认配置复制到我的 server-configs 存储库中的新数据目录中/usr/local/apps/server-configs/configs/postgres/postgres_data/

Postgresql 将其服务文件安装到这些路径:(/lib,而不是/etc):

/lib/systemd/system/postgresql.service
/lib/systemd/system/[email protected]

通过sudo systemctl edit postgresql和,我已将以下服务环境变量分配添加到这两个位置:sudo systemctl edit [email protected]

[Service]
Environment=
Environment=PGDATA=/usr/local/apps/server-configs/configs/postgres/postgres_data/

(双重Environment声明可能不正确。在解决此问题时,我在某处读到必须将它们设置为清除之前存在的所有内容。

这又创建了 2 个覆盖文件:

postgresql.service.d/override.conf
[email protected]/override.conf

然后我做了守护进程重新加载并重新启动了 Postgres,只是为了好玩。

sudo systemctl daemon-reload
sudo systemctl restart postgresql

最后为了检查 Postgres 是否获取了新的数据目录,我连接到数据库并通过以下方法进行检查:

sudo -iu postgres
psql
postgres@logs:~$ psql

psql (15.2 (Ubuntu 15.2-1.pgdg22.04+1))
Type "help" for help.

postgres=# SHOW config_file;
               config_file               
-----------------------------------------
 /etc/postgresql/15/main/postgresql.conf
(1 row)

我读过很多演练,将其描述为或多或少解决此问题的正确方法。但无论我一直在尝试什么,配置文件仍然指向已安装的版本,而不是我的server-configs存储库中的版本。

我缺少什么?谢谢!

答案1

我遇到了类似的问题,结果发现我在手动编译的版本旁边安装了影子 postgres。影子 postgres 是使用 postgres-contrib-15 通过 apt 安装的。我下面的 systemd 脚本实际上是使用全局 postgresql.conf 启动影子 postgres

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
Wants=network-online.target
After=network-online.target

[Service]
Type=notify
User=postgres
Environment=PGDATA=/var/lib/postgresql/data
ExecStart=/usr/lib/postgresql/bin/postgres -D /var/lib/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target

编辑为了解决这个问题,我简单地删除了 postgres-contrib-15sudo apt remove postgres-contrib-15

相关内容