我安装了Bitnami Django 堆栈其中包括 PostgreSQL 8.4。
当我运行时psql -U postgres
出现以下错误:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
PG 肯定正在运行,并且pg_hba.conf
文件如下所示:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
是什么赋予了?
pg 正在运行的“证据”:
root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ? Ss 0:00 \_ postgres: writer process
14348 ? Ss 0:00 \_ postgres: wal writer process
14349 ? Ss 0:00 \_ postgres: autovacuum launcher process
14350 ? Ss 0:00 \_ postgres: stats collector process
15139 pts/1 S+ 0:00 \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 14338/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 14338/postgres
root@assaf-desktop:/home/assaf#
答案1
我使用以下解决方法,以便两个客户端都应该满意:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
答案2
我猜测您正在使用psql
命令的系统版本,它将查找 postgres unix 域套接字,/var/run/postgresql
并且您使用的第三方 postgres 已配置为将它们放在其他地方。
最简单的解决方案可能是使用/opt/djangostack-1.3-0/postgresql/bin/psql
,假设有一个,因为它可能会在正确的位置查找 unix 套接字。
否则,您需要查看设置unix_socket_directory
,postgresql.conf
但很可能会被注释掉,并且默认使用编译的。
答案3
错误消息指的是 Unix 域套接字,因此您需要调整netstat
调用以不排除它们。因此,请尝试不使用选项-t
:
netstat -nlp | grep 5432
我猜想服务器实际上正在监听套接字,/tmp/.s.PGSQL.5432
而不是/var/run/postgresql/.s.PGSQL.5432
客户端尝试连接的套接字。这是在 Debian 或 Ubuntu 上使用手工编译或第三方 PostgreSQL 软件包时的一个典型问题,因为 Unix 域套接字目录的源默认值是,/tmp
但 Debian 打包将其更改为/var/run/postgresql
。
可能的解决方法:
- 使用第三方软件包提供的客户端(调用
/opt/djangostack-1.3-0/postgresql/bin/psql
)。 可能需要完全卸载 Ubuntu 提供的软件包(由于其他反向依赖关系,可能比较困难)。 - 修复第三方包的套接字目录,以兼容 Debian/Ubuntu。
- 改用
-h localhost
通过 TCP/IP 连接。 - 使用
-h /tmp
或等效PGHOST
设置指向正确的目录。 - 不要使用第三方包。