【发布时间】:2011-12-17 15:55:05
【问题描述】:
PostgreSQL 8.4 无法在 Ubuntu 10.10 上启动
sudo /etc/init.d/postgresql start
* Starting PostgreSQL 8.4 database server
* Error: could not exec /usr/lib/postgresql/8.4/bin/pg_ctl /usr/lib/postgresql/8.4/bin/pg_ctl start -D /var/lib/postgresql/8.4/main -l /var/log/postgresql/postgresql-8.4-main.log -s -o -c config_file="/etc/postgresql/8.4/main/postgresql.conf" :
在/usr/lib/postgresql/8.4/bin/pg_ctl 上运行ldd
ldd /usr/lib/postgresql/8.4/bin/pg_ctl
linux-gate.so.1 => (0xb77e4000)
libpq.so.5 => /usr/lib/libpq.so.5 (0xb77a2000)
libc.so.6 => /lib/libc.so.6 (0xb7645000)
libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0xb75fb000)
libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0xb74ac000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb73fd000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb73f9000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb73ca000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7398000)
libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb7351000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7337000)
/lib/ld-linux.so.2 (0xb77e5000)
libdl.so.2 => /lib/libdl.so.2 (0xb7333000)
libz.so.1 => /lib/libz.so.1 (0xb731e000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb72fa000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb72f1000)
libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb72ed000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb72d9000)
liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb72cc000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb72b4000)
libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb7218000)
libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7207000)
libgcrypt.so.11 => /lib/libgcrypt.so.11 (0xb7193000)
libgpg-error.so.0 => /lib/libgpg-error.so.0 (0xb718e000)
我已检查权限并已授予 root 适当的权限,我正在尝试以 root 身份运行 postgresql。
【问题讨论】:
-
/usr/lib/postgresql/8.4/bin/pg_ctl可执行吗? -
postgres 用户对
/var/lib/postgresql/8.4/main有完全读写权限吗? -
没有。
drwx------ 11 root postgres 4.0K 2011-12-13 13:55 main用户postgres甚至不能 cd 到main。但我以root的身份运行/etc/init.d/postgresql start -
即使您以系统用户
root的身份运行/etc/init.d/postgresql start,服务器也将始终由系统用户postgres启动。 PostgreSQL 不希望root拥有该进程,从而赋予服务器进程过多的权限,这些权限不需要并且可能被用于做坏事。 -
是的,您希望将该目录和所有后代归用户 postgres、组 postgres 拥有。我刚刚在 ubuntu 11.04 上进行了 postgres-8.4 的干净软件包安装,从 /var/lib/postgresql 开始的每个实体都是 [67]00 postgres:prostgres,除了 /etc/ssl/certs 的几个符号链接。
sudo chown -R postgres. /var/lib/postgresql && sudo chown -h root. /var/lib/postgresql/8.4/main/server.{key,crt}应该让您回到 debian/ubuntu 软件包安装设置的权限。