无法连接到安装在Ubuntu上的postgres

我安装了包含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提供的软件包(可能因为其他反向依赖关系而很难)。
  • 修复第三方软件包的套接字目录与Debian / Ubuntu兼容。
  • 使用-h localhost通过TCP / IP来连接。
  • 使用-h /tmp或等效的PGHOST设置指向正确的目录。
  • 不要使用第三方软件包。