我安装了包含PostgreSQL 8.4的Bitnami Django堆栈 。
当我运行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正在运行的“certificate”:
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#
我使用以下解决方法,以便两个客户都应该感到高兴:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
猜测你正在使用系统版本的psql
命令,它将在/var/run/postgresql
查找postgres unix域套接字,并且您正在使用的第三方postgres已经被configuration为将它们放在其他地方。
最简单的解决scheme可能是使用/opt/djangostack-1.3-0/postgresql/bin/psql
代替,假设有一个,因为它可能会在unix套接字的正确位置。
否则,您需要查看postgresql.conf
中的unix_socket_directory
设置,但很可能会被注释掉,并且正在使用默认情况下的编译。
错误消息是指一个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提供的软件包(可能因为其他反向依赖关系而很难)。 -h localhost
通过TCP / IP来连接。 -h /tmp
或等效的PGHOST
设置指向正确的目录。