【问题标题】:Unable to connect with psycopg2, but can via command line无法与 psycopg2 连接,但可以通过命令行
【发布时间】:2023-03-10 00:00:01
【问题描述】:

我正在尝试连接到远程 Postgres 数据库(在本例中为 Heroku Postgres 实例)。我有一个 Fabric 命令,它使用 psycopg2 对数据库执行一些工作。

我的 Postgres 连接是这样发生的:

# conf is a hash derived from the heroku config DATABASE_URL
self.conn = psycopg2.connect(
    database=conf.get('database'), # supplied by heroku
    user=conf.get('username'), # is the database username supplied by heroku
    password=conf.get('password'), # supplied by heroku
    host=conf.get('host'), # e.g ec2-00-000-00-00.compute-1.amazonaws.com
    port=conf.get('port') # 5492
)

运行脚本出错:

psycopg2.OperationalError: FATAL:  password authentication failed for user "my-server-user"
FATAL:  no pg_hba.conf entry for host "my-ip-address-here", user "my-server-user", database "database-name-here", SSL off

调查pg_hba.conf,我暂时引入了以下行:

host    all             all             trust

然后用

重新启动 Postgres
sudo /etc/init.d/postgresql-9.3 restart

但我仍然遇到这个问题。但是,我能够简单地使用命令行客户端进行连接(即使没有更改 pg_hba 配置):

psql -h ec2-00-000-00-00.compute-1.amazonaws.com -p 5492 database-name -W

手动提供密码。

代码在我的 Mac 上本地运行,因此存在配置错误或被阻止的内容。我只是无法弄清楚它可能是什么。欢迎提出任何建议。

(很明显,现实世界的值已被上述示例中的占位符替换)

【问题讨论】:

  • 这没有多大意义。您正在使用 Heroku,那么如何修改 pg_hba.conf?您是否修改了本地计算机上无关 PostgreSQL 服务器的 pg_hba.conf?或者您实际上并没有尝试使用 Heroku?

标签: python postgresql heroku psycopg2


【解决方案1】:

Heroku 要求您使用 SSL。

如果你连接到 Heroku,那么:

  • 在本地主机上修改 PostgreSQL 服务器的 pg_hba.conf 效果绝对为零,因为那不是您要连接的服务器;

  • 必须使用 SSL。将sslmode='require' 选项传递给psycopg2

【讨论】:

  • 哇!我知道这一定很愚蠢。我刚刚陷入了关于我收到的错误的答案的兔子洞,并且没有点击显然 pg_hba.conf 不会影响我的连接。今天早上将对此进行测试,然后接受您的答案。
  • 这行得通,结果证明我在提供的用户名方面也有问题。将此归结为盯着这个问题太久。谢谢,标记已接受。
  • @JeffAndersen 如果您没有指定用户名,通常会发生这种情况,因此选择默认值(当前运行的 unix 用户 psycopg2)。也许您在以某种方式分配user= 时犯了错误? (显然你在我写这篇文章并编辑评论时发现了这一点,耸耸肩
猜你喜欢
  • 2015-12-26
  • 1970-01-01
  • 2012-02-25
  • 2019-07-08
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2020-04-27
  • 2015-12-24
相关资源
最近更新 更多