在Red Hat EL7上,我从标准存储库安装了Postgres,并以通常的方式初始化了数据库:
# postgresql-setup initdb
但是当我尝试用以下方式启动服务时:
# systemctl start postgresql.service
我收到错误:
Job for postgresql.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.
journalctl -xn
给了我:
Oct 06 14:52:55 myserver systemd[1]: Starting PostgreSQL database server...
-- Subject: Unit postgresql.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit postgresql.service has begun starting up.
Oct 06 14:52:55 myserver systemd[29267]: Failed at step USER spawning /usr/bin/postgresql-check-db-dir: No such process
-- Subject: Process /usr/bin/postgresql-check-db-dir could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/bin/postgresql-check-db-dir could not be executed and failed.
--
-- The error number returned while executing this process is 3.
有人有什么想法吗?
答案 0 :(得分:2)
我不认为这是一个完整和正确的解决方案,但这就是我所说的“强大的解决方法”。这个问题似乎始于这个Linux系统可以在本地以及通过目录服务器进行身份验证。 PostgreSQL包试图创建一个用户:group combo,名为postgres:postgres。未创建用户“postgres”,因为它已存在于目录服务器中。 “postgres”小组是在当地创建的。
当systemd启动Postgres时,它会在尝试调用postgresql-check-db-dir
之前更改为postgres用户,这是一个检查数据库目录是否已使用postgresql-setup initdb
初始化的脚本。似乎systemd无法更改为此目录提供的postgres用户。
我的解决方法是创建一个新的本地用户(“pgsql”)并将/ var / lib / pgsql和/ var / run / postgresql的所有权更改为此新用户,然后创建一个名为的自定义systemd服务文件/etc/systemd/system/postgresql.service
覆盖默认值。该文件的内容是:
.include /usr/lib/systemd/system/postgresql.service
[Service]
User=pgsql
Group=postgres
这允许Postgres由systemd启动和停止。
答案 1 :(得分:0)
对我来说,日志告诉你db路径不存在。您确定psql配置正确,数据库路径是否存在且您是否有权访问它?