【问题标题】:Connection Error while connecting to PostgreSQL as postgres user?以 postgres 用户身份连接到 PostgreSQL 时出现连接错误?
【发布时间】:2014-09-25 08:39:15
【问题描述】:

我无法使用 python 和 psycopg2 远程连接到 PostgreSQL:

这是我的代码。

>>> import psycopg2
>>> conn_string = "host='localhost' dbname='mydb' user='postgres'"
>>> print "Connecting to database\n     ->%s" % (conn_string)
    Connecting to database
      ->host='localhost' dbname='mydb' user='postgres'
>>> conn = psycopg2.connect(conn_string)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/tools/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(127.0.0.1)上运行并接受 端口 5432 上的 TCP/IP 连接?

没有为 postgres 用户设置密码。

一般情况下,我可以通过在主机上运行以下方法来连接数据库。

 1. SSH to box
 2. su - postgres
 3. psql
 4. \c mydb

服务器运行 PostgreSQL 9.1。

【问题讨论】:

  • 我无法远程连接到 psql:你甚至没有尝试使用 host=localhost,除非你设置了一个你没有告诉的 SSH 隧道.
  • 那么,“服务器是否在主机“localhost”(::1) 上运行并接受端口 5432 上的 TCP/IP 连接?”?
  • @DanielVérité 我发现新用户在谈论 ssh 到一个盒子时似乎会说“远程服务器”,然后从远程机器上运行的代码连接到一个同一远程主机上的数据库。它对他们来说是一个“远程服务器”,即使远程性与数据库连接的目的无关。这可能是这样的情况,按照最后的注释。
  • @IpsIds 您是否通过 ssh 进入远程服务器并在那里运行该 Python 代码?还是在您的计算机上运行,​​而不是在远程服务器上运行?
  • @CraigRinger,代码在我的电脑上本地运行。

标签: python postgresql psycopg2


【解决方案1】:

您正在尝试使用在您的计算机上运行的脚本连接到 localhost 上的 PostgreSQL,但那里没有运行 PostgreSQL 服务器。

为此,您必须通过 ssh 连接到远程服务器,然后在那里运行您的 Python 脚本,其中 PostgreSQL 服务器相对于 Python 脚本是“本地”的。

(这就是运行 psql 有效的原因 - 因为您在远程服务器上运行它,其中 PostgreSQL 相对于 psql 是“本地”的)。

或者,您可以:

  • 使用 SSH 隧道将 PostgreSQL 端口从本地计算机转发到远程计算机;或

  • 在服务器上启用远程连接后,使用其主机名或 IP 地址直接通过 TCP/IP 连接到远程 PostgreSQL 服务器。

请注意,仅将服务器的 IP 地址或主机名放入连接字符串而不是 localhost 将不起作用,除非您还将服务器配置为 接受远程连接 .您必须设置 listen_addresses 以侦听非本地连接,添加任何所需的防火墙规则,设置 pg_hba.conf 以允许来自远程计算机的连接,并且最好设置 SSL。所有这些都包含在 PostgreSQL 用户手册的客户端身份验证一章中。

您可能会发现 SSH 隧道更简单、更容易理解。

【讨论】:

    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 2020-07-30
    • 2021-08-30
    • 2016-08-26
    • 2020-04-04
    • 2013-02-22
    • 2017-06-18
    • 2017-02-05
    相关资源
    最近更新 更多