无法使用pgAdmin连接远程PostgreSQL数据库

54

我在我的本地服务器(Ubuntu)上安装了PostgreSQL,其IP地址为192.168.1.10。现在,我正在尝试使用pgAdmin从我的客户端机器(Ubuntu),即IP地址为192.168.1.11的机器中访问数据库。

我知道我必须更改postgresql.conf和pg_hba.conf以允许客户端连接。你能指导我如何操作吗?


你是否收到了错误提示?如果有,是什么错误? - krishna
这并不是一个编程问题。不过,在data/pg_hba.conf文件中添加一行:"host all all 192.168.1.0/24 md5" - nos
你遇到了什么错误?你执行了哪个命令来连接不同服务器上的数据库?你打算在postgresql.conf和pg_hba.conf中做出哪些更改? - Space
在Windows 8.1下,使用10.1 + pgAdmin 4,我卸载了所有内容(c:\program files\postgresql\和c:\program files (x86)\postgresql\子目录包含卸载程序),并删除了这两个目录。重启电脑后,安装了独立的pgAdmin 4。它起作用了!在我的情况下,没有其他建议可行。但这不是实际操作,所以我不能把这个作为答案留下来。 - TamusJRoyce
7个回答

117
通过pgAdmin3远程连接到PostgreSQL服务器实际上是一个三步骤的过程。

注意:我使用的是Ubuntu 11.04和PostgreSQL 8.4。

  1. 您需要使PostgreSQL监听远程传入的TCP连接,因为默认设置仅允许在环回接口上监听连接。要能够远程访问服务器,您需要将以下行添加到文件/etc/postgresql/8.4/main/postgresql.conf:

    listen_addresses = '*'

  2. 默认情况下,PostgreSQL拒绝从任何远程地址接收到的所有连接,因此您需要通过将以下行添加到/etc/postgresql/8.4/main/pg_hba.conf:放宽这些规则:

    host all all 0.0.0.0/0 md5

    这是一个访问控制规则,如果用户可以提供有效的密码(md5关键字),则允许任何人从任何地址登录。 您可以使用所需的网络/掩码代替0.0.0.0/0。

  3. 当您将这些修改应用于配置文件后,您需要重新启动PostgreSQL服务器。现在,您可以使用用户名和密码远程登录到服务器。


12
在Ubuntu系统中启动PostgresSQL服务器的命令是sudo /etc/init.d/postgresql stopsudo /etc/init.d/postgresql start。我通过谷歌搜索得到了这个信息,现在将它分享给那些不知道如何重启该服务的人们。 - ganesshkumar
2
在RedHat中,/var/lib/pgsql/9.4/data/pg_hba.conf - Junior Mayhé
1
一个小更新。上面的 0.0.0.0/0 md5 仅适用于IPv4。 为了启用IPv6访问,请添加以下行: host all all ::0/0 md5 - raschild
到现在为止,你可能已经发现了,但还是提一下:使用 sudo /etc/init.d/postgresql status 命令来查看你启动或停止的服务的状态。 - Guru
1
在Windows上不要忘记防火墙,禁用它或为Postgres添加规则。 - vehsakul

8
如果您使用的是 PostgreSQL 8 或更高版本,您可能需要修改 /etc/postgresql/8.4/main/postgresql.conf 中的 listen_addresses 设置。请尝试添加以下行:
listen_addresses = *

以下设置将告诉PostgreSQL监听所有网络接口的连接。

如果未明确设置此项,其默认值为localhost,这意味着它只会接受来自同一台计算机的连接。


2

在Linux终端中尝试以下操作:

  • sudo service postgresql start :启动服务器
  • sudo service postgresql stop :停止服务器
  • sudo service postgresql status :检查服务器状态

1

我不需要更改我的postgresql.conf文件,但是基于我的psql通过命令行连接而pgAdmin无法连接AWS上的RDS,我需要进行以下操作。

我确保我的RDS设置为公共访问。我确保我的ACL和安全组是完全开放的,但仍然存在问题,因此我执行了以下操作:

sudo find . -name *.conf 然后 sudo nano ./data/pg_hba.conf 然后在pg_hba.conf文件的指令顶部添加host all all 0.0.0.0/0 md5,然后pgAdmin自动登录。

这也适用于pg_hba.conf文件中的以下内容:host all all md5没有任何IP地址,这也适用于我的IP地址host all all <myip>/32 md5

另外,我的RDS位于默认VPC中。 我在我的非默认VPC中有一个完全相同的RDS实例,具有与我的默认VPC相同的安全组、ACL和安全组设置,但我无法使其正常工作。 不知道为什么,但那是另一天的事情。


1

通过SSH隧道连接到PostgreSQL

如果您不想将端口5432开放给任何流量,或者不想配置PostgreSQL以侦听任何远程流量,则可以使用SSH隧道来进行远程连接到PostgreSQL实例。以下是操作方法:

  1. 打开PuTTY。如果您已经设置好一个会话以连接到EC2实例,请加载该会话,但是先不要连接它。如果您没有这样的会话,请查看此文。
  2. 转到Connection > SSH > Tunnels
  3. 在“Source Port”字段中输入5433。
  4. 在“Destination”字段中输入127.0.0.1:5432。
  5. 点击“Add”按钮。
  6. 返回Session,在保存会话后,点击“Open”进行连接。
  7. 这将打开一个终端窗口。一旦连接上,您可以离开那里。
  8. 打开pgAdmin并添加一个连接。
  9. 在“Host”字段中输入localhost,在“Port”字段中输入5433。指定连接名称、用户名和密码。完成后,点击“OK”。

0

检查你的防火墙。当你禁用它时,你就可以连接了。如果你想/不能禁用防火墙,请为你的远程连接添加规则。


你能提供更多关于需要添加的规则的细节吗? - Chintan Pathak

0

适用于Redhat Linux

sudo vi /var/lib/pgsql9/data/postgresql.conf 

pgsql9是安装的PostgreSQL版本的文件夹,其他版本可能不同。

将 listen_addresses = ‘localhost’ 更改为 listen_addresses = '*' 然后

sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接