返回

PostgreSQL源码安装后找不到postgresql.service怎么办?

Linux

PostgreSQL源码安装后找不到postgresql.service?问题排查及解决方案

在 Rock Linux 系统上,选择从源码安装 PostgreSQL 虽然能带来更灵活的配置选项,但也可能遇到一些软件包安装中不会出现的状况。执行 systemctl restart postgresql 命令时如果遇到 Failed to start postgresql.services: Unit postgresql.service not found 的错误提示,就说明系统找不到预期的 postgresql.service 文件,这是源码安装 PostgreSQL 时经常遇到的问题。

为什么会发生这种情况?因为源码安装默认不会自动创建 systemd 服务单元文件,而 systemd 恰恰是 Linux 系统用于管理服务的关键组件。

深入问题根源

systemd 是通过 .service 文件来定义和管理服务的,包括服务的启动、停止、重启等操作。 如果在 /usr/lib/systemd/system 目录下找不到 postgresql.service 文件,systemd 就无法识别和管理 PostgreSQL 服务,自然就无法执行 systemctl restart postgresql 这样的命令。

解决方案:两种思路

1. 手动创建 systemd 服务单元文件

这是解决问题的直接方法:自己动手创建 systemd 需要的 postgresql.service 文件。

首先,确认 PostgreSQL 的安装目录,然后在 /usr/lib/systemd/system/postgresql.service 路径下创建一个新文件,并将以下内容粘贴进去:

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /usr/local/pgsql/data
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
KillMode=process

[Install]
WantedBy=multi-user.target

几点需要注意:

  • /usr/local/pgsql 需要替换成你的 PostgreSQL 实际安装路径。
  • UserGroup 字段需要根据你的系统配置修改。

创建文件后,执行以下命令让 systemd 重新加载服务单元文件:

systemctl daemon-reload

现在,你就可以使用 systemctl start postgresql 命令启动 PostgreSQL 服务,并使用 systemctl enable postgresql 设置开机自启动。

2. 使用 pg_ctl 命令管理 PostgreSQL 服务

除了依赖 systemd,PostgreSQL 自身也提供了命令行工具 pg_ctl 用于管理服务。

使用 pg_ctl 命令前,需要先进入 PostgreSQL 数据目录:

cd /usr/local/pgsql/data 

启动、停止、重启 PostgreSQL 服务的命令如下:

pg_ctl start
pg_ctl stop
pg_ctl restart

pg_ctl 命令赋予了你更高的灵活性,但同时也需要你手动管理服务的启动和停止。

总结

总而言之,解决 PostgreSQL 源码安装后找不到 postgresql.service 文件的问题,可以选择手动创建 systemd 服务单元文件,或者使用 pg_ctl 命令管理 PostgreSQL 服务。

建议优先考虑使用 systemd 管理 PostgreSQL 服务,因为它能够更便捷地管理服务的启动、停止、重启等操作。

希望本文能够帮助你解决 PostgreSQL 源码安装过程中的问题,顺利使用 PostgreSQL 数据库。

常见问题

  1. 创建了 postgresql.service 文件,但启动服务时仍然报错?

    检查文件路径是否正确,文件内容中的路径和用户组信息是否与实际一致。

  2. 使用 pg_ctl 启动服务时报错 "pg_ctl: no database directory specified and environment variable PGDATA unset"?

    你需要进入 PostgreSQL 数据目录后再执行 pg_ctl 命令,或者设置 PGDATA 环境变量。

  3. 如何查看 PostgreSQL 服务的运行状态?

    使用 systemctl status postgresql 命令查看服务状态。

  4. 如何设置 PostgreSQL 服务开机自启动?

    使用 systemctl enable postgresql 命令设置开机自启动。

  5. 如何禁用 PostgreSQL 服务开机自启动?

    使用 systemctl disable postgresql 命令禁用开机自启动。