无法与psycopg2连接,但可以通过命令行

时间:2014-10-01 17:18:42

标签: python postgresql heroku psycopg2

我试图连接到远程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上本地运行,因此存在错误配置或阻止的内容。我无法弄清楚它可能是什么。欢迎任何建议。

(显然,现实世界的价值已经被上面样本中的占位符取代)

1 个答案:

答案 0 :(得分:4)

Heroku要求您使用SSL。

如果您要连接到Heroku,那么:

  • 在本地主机上修改PostgreSQL服务器的pg_hba.conf将完全没有效果,因为那不是您要连接的服务器;

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