关于postgresql:“psql:无法连接到服务器:连接被拒绝”连接到远程数据库时出错

“psql: could not connect to server: Connection refused” Error when connecting to remote database

我正在尝试使用以下命令连接到远程服务器中安装的postgres数据库:

psql -h host_ip -U db_username -d db_name

发生以下错误:

psql: could not connect to server: Connection refused
Is the server running on host"" and accepting
TCP/IP connections on port 5432?

  • Postgres安装的版本是9.4。
  • 主机操作系统:Ubuntu 15.04
  • 客户端操作系统:Centos 7
  • 我已经尝试了以下但问题仍未解决:

  • 编辑pg_hba.conf文件以包含
  • host all all 0.0.0.0/0 md5

  • 编辑'postgresql.conf'并将listen参数更改为
  • listen_addresses='*'

  • 重新启动postgres服务。
  • 在主机和客户端上禁用防火墙和iptables。
  • 我通过在本地运行psql命令来检查它是否有效。
  • 我尝试了这个问题中给出的第二个解决方案。 运行nmap给了我以下输出:
  • Starting Nmap 6.47 ( http://nmap.org ) at 2015-09-07 18:08 IST
    Nmap scan report for 10.17.250.250
    Host is up (0.0000040s latency).
    Not shown: 997 closed ports
    PORT STATE SERVICE
    22/tcp open ssh
    25/tcp open smtp
    80/tcp open http

    我错过了什么。 希望有人能提供帮助。


    1
    cd /etc/postgresql/9.x/main/

    打开名为postgresql.conf的文件

    1
    sudo vi postgresql.conf

    将此行添加到该文件

    1
    listen_addresses = '*'

    然后打开名为pg_hba.conf的文件

    1
    sudo vi pg_hba.conf

    并将此行添加到该文件

    1
    host  ALL  ALL 0.0.0.0/0 md5

    它允许使用加密密码访问所有用户的所有数据库

    重启你的服务器

    1
    sudo /etc/init.d/postgresql restart


    检查postgresql.conf中定义的端口。我安装的postgres 9.4使用port 5433而不是5432


    当我尝试远程连接到我的Raspberry Pi上的新PostgreSQL安装时,我一直在努力解决这个问题。以下是我为解决此问题所做的全部细分:

    首先,打开PostgreSQL配置文件,确保该服务将在localhost之外侦听。

    1
    sudo [editor] /etc/postgresql/[version]/main/postgresql.conf

    我使用nano,但你可以使用你选择的编辑器,当我安装了9.1版本时,该目录将适用于你安装的任何版本。

    向下搜索标题为"连接和身份验证"的部分。第一个设置应为'listen_addresses',可能如下所示:

    1
    #listen_addresses = 'localhost'     # what IP address(es) TO listen ON;

    右边的注释提供了有关如何更改此字段的良好说明,并且使用建议的'*'可以很好地工作。

    请注意,此字段已注明#。根据注释,它将默认为"localhost",因此仅将值更改为'*'是不够的,您还需要通过删除前导#来取消注释该设置。

    它现在应该是这样的:

    1
    listen_addresses = '*'         # what IP address(es) TO listen ON;

    您还可以检查下一个设置"端口",以确保正确连接。 5432是默认值,如果您没有指定,则是psql尝试连接的端口。

    保存并关闭该文件,然后打开Client Authentication配置文件,该文件位于同一目录中:

    1
    sudo [editor] /etc/postgresql/[version]/main/pg_hba.conf

    如果您想限制访问,我建议您阅读该文件,但对于基本的打开连接,您将跳转到文件的底部并添加如下所示的行:

    1
    host ALL ALL ALL md5

    如果您愿意,可以按Tab键而不是空格以将字段与现有列对齐。

    就个人而言,我改为添加了一行如下所示:

    1
    host [database_name] pi 192.168.1.0/24 md5

    这会将连接限制为仅限一个用户和局域网子网上的一个数据库。

    保存对文件的更改后,需要重新启动服务才能实现更改。

    1
    sudo service postgresql restart

    现在,您可以使用以下命令检查以确保服务正在公开侦听正确的端口:

    1
    sudo netstat -ltpn

    如果不以高架形式运行它(使用sudo),它不会告诉您在这些端口上侦听的进程的名称。

    其中一个进程应该是Postgres,本地地址应该是开放的(0.0.0.0)并且不限于仅本地流量(127.0.0.1)。如果它未打开,那么您需要仔细检查配置文件并重新启动服务。您可以再次确认该服务正在侦听正确的端口(默认为5432,但您的配置可能不同)。

    最后,您将能够使用以下命令从远程计算机成功连接:

    1
    psql -h [server ip address] -p [port NUMBER, optional IF 5432] -U [postgres USER name] [DATABASE name]

    确保在配置文件中正确应用了这些设置。

    1
    vim /etc/postgresql/x.x/main/postgresql.conf

    请尝试以下操作查看日志并找到问题所在。

    1
    tail /var/log/postgresql/postgresql-x.x-main.log


    以下帮助我对maco Mojave:

    1
    2
    3
    $sudo mv /usr/LOCAL/var/postgres /usr/LOCAL/var/postgres.save
    $brew uninstall postgres
    $brew install postgres

    就我而言,我没有更改管理门户中的azure默认安全策略。原来是允许端口22,其余都被拒绝。只要我添加5432端口,一切都会变好。


    我认为你使用的是机器名而不是主机的ip。

    我尝试使用机器名称时遇到了同样的错误。因为,仅当客户端和主机位于同一网络且安装了相同的操作系统时才允许。