无法连接到监听端口 5432 的 PostgreSQL

无法连接到监听端口 5432 的 PostgreSQL

我安装了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

此问题是由于安装的postgres软件包没有版本号而引起的。虽然postgres会安装并且版本正确,但设置集群的脚本将无法正确运行;这是打包问题。

如果您愿意,postgres可以运行一个脚本来创建此集群并开始postgres运行。但是,还有一种更简单的方法。

首先清除旧的 postgres 安装,这将删除旧安装的所有内容,包括数据库,因此请先备份数据库。。目前问题出在 9.1 上,所以我假设你安装的是这个版本

sudo apt-get remove --purge postgresql-9.1

现在只需重新安装

sudo apt-get install postgresql-9.1

请记下带有版本号的软件包名称。HTH。

答案2

错误消息指的是 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设置指向正确的目录。
  • 不要使用第三方包。

答案3

这对我有用:

编辑:postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

启用或添加:

listen_addresses = '*'

重新启动数据库引擎:

sudo service postgresql restart

另外,您可以检查文件pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

并添加您的网络或主机地址:

host    all             all             192.168.1.0/24          md5

答案4

您可以使用psql -U postgres -h localhost强制通过 TCP 而不是 UNIX 域套接字进行连接;您的netstat输出显示 PostgreSQL 服务器正在监听本地主机的端口 5432。

您可以使用不同的调用来找出 PostgrSQL 服务器使用了哪个本地 UNIX 套接字网络状态

netstat -lp --protocol=unix | grep postgres

无论如何,PostgreSQL 服务器监听的接口是在 中配置的postgresql.conf

相关内容