无法启动posgtresql,原因不明

Mat*_*udi 17 arch-linux systemd postgresql

我已经通过 pacman 安装了 postgresql。现在我正在尝试运行它:

    $ sudo systemctl start postgresql
    Job for postgresql.service failed because the control process exited with error code.
    See "systemctl status postgresql.service" and "journalctl -xe" for details.
Run Code Online (Sandbox Code Playgroud)

进而:

    $ sudo systemctl status postgresql
    ? postgresql.service - PostgreSQL database server
       Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
       Active: failed (Result: exit-code) since Sun 2016-07-10 15:30:47 UTC; 17s ago
      Process: 19468 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=1/FAILURE)

    Jul 10 15:30:47 my_comp systemd[1]: Starting PostgreSQL database server...
    Jul 10 15:30:47 my_comp systemd[1]: postgresql.service: Control process exited, code=exited status=1
    Jul 10 15:30:47 my_comp systemd[1]: Failed to start PostgreSQL database server.
    Jul 10 15:30:47 my_comp systemd[1]: postgresql.service: Unit entered failed state.
    Jul 10 15:30:47 my_comp systemd[1]: postgresql.service: Failed with result 'exit-code'.
Run Code Online (Sandbox Code Playgroud)

它出什么问题了?

Rak*_*kib 16

以下步骤解决了您的问题

第一步:创建数据目录(与之前在配置文件中设置的PGROOT变量一致)

sudo mkdir /var/lib/postgres/data
Run Code Online (Sandbox Code Playgroud)

第 2 步:将 /var/lib/postgres/data 所有权设置为用户“postgres”

chown postgres /var/lib/postgres/data
Run Code Online (Sandbox Code Playgroud)

第 3 步:作为用户 'postgres' 启动数据库。

sudo -i -u postgres
initdb  -D '/var/lib/postgres/data'
Run Code Online (Sandbox Code Playgroud)

第 4 步:以 root 身份启动服务

  • 根据版本的不同,这可能需要是 `initdb -D '/var/lib/pgsql/data'` (2认同)

小智 5

/usr/share/doc/postgresql/README.rpm-dist以 root 用户身份运行这些命令

postgresql-setup --initdb
systemctl restart postgresql.service
systemctl enable postgresql.service
Run Code Online (Sandbox Code Playgroud)


Mar*_*erg 0

您共享的日志记录包括这一行:

/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=1/FAILURE)
Run Code Online (Sandbox Code Playgroud)

$PGROOT设置为什么?确实$PGROOT/data存在?这个目录有init文件吗?如果没有,您可能需要initdb在该目录上运行。

要初始化,请以 root 身份创建一个空数据目录,然后使用 chown 将该目录的所有权分配给数据库用户帐户,然后 su 成为要运行的数据库用户initdb /path/to/data