我正在尝试更改 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