psql cant connect to PostgreSQL server (postmaster) on IP and port 5432?
请在回复之前阅读(因为它可能会发生)。 我正在运行我的postmaster(postgres)服务器。 请参阅下面的'sudo netstat -anp | grep 5432'输出?
1 2 3 | tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 29606/postmaster unix 2 [ ACC ] STREAM LISTENING 1650581 29606/postmaster /var/run/postgresql/.s.PGSQL.5432 unix 2 [ ACC ] STREAM LISTENING 1650582 29606/postmaster /tmp/.s.PGSQL.5432 |
我可以使用localhost连接
1 | psql -h localhost (OR 127.0.0.1) -d <DB> -U USER -W |
但是当我尝试使用tcp从其他主机连接时,通过指定
1 | psql -h ip_add_postmaster -d <DB> -U USER -W |
它抛出:
psql: could not connect to server: Connection refused
Is the server running on host XXXXXX and accepting TCP/IP connections on port 5432?
这有什么不对?
1 2 3 4 5 6 7 8 9 10 | pg_hba.conf # TYPE DATABASE USER ADDRESS METHOD #"local" IS FOR Unix DOMAIN socket connections ONLY LOCAL ALL ALL peer # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 md5 # IPv6 LOCAL connections: host ALL ALL ::1/128 md5 |
在postgresql.conf中,
1 2 3 4 | listen_addresses = 'localhost, 127.0.0.1, ip_add_postmaster' Note: ip_add_postmaster IS same AS my Elastic IP AND NOT public DNS. IF this information matters. |
我在这做错了什么? 计算机托管在Amazon EC2上,并打开了端口5432。
正如您的netstat输出所示,它正在侦听
在配置中设置
[编辑]
其他要检查的事项:
- 亚马逊防火墙阻止什么?
- 是iptables阻止什么?
但首先要确保侦听地址正确,你的netstat输出显示它不会像这样工作。
我发现的另一个问题是如果你最终安装了两个Postgres,第二个可以选择非默认端口(在我的例子中它是5433 i / o 5432)。所以检查postgresql.conf中的端口可能是个好主意。
listen_addresses ='localhost,private_ip'解决了这个问题。我无法在弹性IP上启动postmaster服务器。一旦postgres服务器启动了localhost和私有IP,我就可以连接了。
我也遇到了同样的问题。在调试时,它与端口没有任何关系,但是由于Postgres文件夹中的一些缺少目录。
更新Mac OS(从10.13.1 - > 10.13.13)时,目录
1 2 3 4 5 6 7 | mkdir /usr/LOCAL/var/postgres/pg_tblspc mkdir /usr/LOCAL/var/postgres/pg_twophase mkdir /usr/LOCAL/var/postgres/pg_stat mkdir /usr/LOCAL/var/postgres/pg_stat_tmp mkdir /usr/LOCAL/var/postgres/pg_replslot mkdir /usr/LOCAL/var/postgres/pg_snapshots mkdir /usr/LOCAL/var/postgres/pg_logical/{snapshots,mappings} |
我遇到了这个问题并尝试了我在SO中找到的各种修复方法,并希望添加一个简单的解决方案,在我意识到它与我的情况下的权限有关之后对我有用。
简单地说,如果您在Windows上运行psql服务器,则最初只能使用默认的postgres超级用户登录,启动服务器等。
所以,首先尝试从命令行运行:
并在提示符下输入您的密码。如果您已设法登录并且服务器已启动,那么这是一个权限问题。从这里,您可以为自己创建一个角色,该角色对您尝试运行的任何数据库具有登录权限。
如果错误仍然存??在,请考虑检查postgresql.conf,如上所述,以确保默认IP设置为*或localhost,并将端口设置为5432或默认情况下所需的任何端口。