【问题标题】:How to configure PostgreSQL to allow TCP/IP connections?如何配置 PostgreSQL 以允许 TCP/IP 连接?
【发布时间】:2015-12-02 11:44:44
【问题描述】:

我正在尝试将 web 应用程序推送到 Heroku,但无法让 Postgres 接受 TCP/IP 连接。我已经浏览了关于这个主题的所有问题/答案,但仍然无法解决这个问题。我是数据库/网络开发的新手,非常感谢任何帮助!

在 postgresql.conf 中,我将监听地址变量从 localhost 更改为 #listen_addresses = ‘*’。端口看起来正确:#port = 5432

我还添加了0.0.0.0pg_hba.conf(这是正确的顺序吗?):

# TYPE   DATABASE       USER        ADDRESS          METHOD
local       all         all                           trust
host        all         all          0.0.0.0/0        md5
host        all         all        127.0.0.1/32       trust
host        all         all         ::1/128           trust

添加该地址后,当我在终端中调用postgres 时,它运行但出现致命错误:

LOG:  database system was shut down at 2015-09-06 16:21:43 PDT
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
FATAL:  database "admin" does not exist

当我尝试启动 psql 时,同样的消息:

psql: FATAL:  database "admin" does not exist

我能够通过另一个数据库连接到psqlpsql -d template1,并创建了一个新的管理员数据库。然后我创建了我的应用程序所需的数据库,并通过使用 Gradle 运行我的项目来确保它可以正常工作。在此过程中,我已经多次完全停止服务器,以查看更改是否有效。

Heroku 日志仍然显示我在更改 Postgres 配置文件之前遇到的相同问题:

Caused by: org.postgresql.util.PSQLException: Connection to
localhost:5432 refused. Check that the hostname and port are correct
and that the postmaster is accepting TCP/IP connections.

当我访问http://localhost:5432/时,它显示“未收到数据”并显示错误“无法加载网页,因为服务器未发送数据。”

感谢您的帮助!

版本:Mac OSX 10.10.5、PostgreSQL 9.4.4、Heroku 3.41.5、Gradle 2.5、Java 1.8.0_51。全部使用 Homebrew 安装。

【问题讨论】:

  • 需要考虑的几件事 1) listen_addresses 应取消注释为您指定的值 2) 在进行 pg_hba.conf / postgresql.conf 更改后 - 应通过重新启动服务或在 postgres 中重新加载配置psql pg_reload_conf() 3) 您没有在问题中指出您的应用程序的连接属性,因此请尝试检查它们尝试运行psql -U yourAppUser -d yourDatabase -h hostnameAddressOrDNS 以检查它们。
  • 澄清一下:您是在尝试使用Heroku provided database 还是在运行您自己的?如果不是 Heroku,这个其他 Postgres 数据库在哪里运行(本地、AWS 等)?
  • @codefinger 你说得对——我试图使用我自己的数据库。我将尝试使用 Heroku,看看效果如何。

标签: java macos postgresql heroku tcp


【解决方案1】:

在我看来,您正在运行自己的独立 Postgres 数据库——这是否正确?如果您使用的是 Heroku,则很有可能——这不是一个好主意。

Heroku 的主要好处之一是它可以为您处理服务器维护/恢复等 - 这是它的主要好处 =)

考虑到上述情况,我建议您使用Heroku Postgres 而不是运行您自己的 Postgres 数据库。它不仅是世界上最大的托管 Postgres 服务——它一直存在永远,基本上没有错误,允许你做很多很棒的事情(即时提供读取从属服务器/备份主服务器等)。 ),甚至有一个慷慨的免费计划

真的没有理由不使用它=)

要说明 Heroku Postgres,您可以简单地说:

$ heroku addons:add heroku-postgresql:dev

这将为您生成一个新数据库,您的应用可以通过名为 DATABASE_URL 的预定义环境变量访问该数据库。只需将该 URL 提供给您的 Web 框架/应用程序代码,然后让它连接到该 URL——它包括用户名/密码等,并且应该很容易工作。

您可能还想查看入门指南以获取更多信息:https://devcenter.heroku.com/articles/heroku-postgresql

【讨论】:

  • 谢谢,这很有帮助。我会试一试,等我完成后回来查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多