使用 PSQL 远程连接到另一个实例
本文介绍如何建立与另一个 PostgreSQL 实例的远程连接。我们将带你逐步完成整个旅程,并强调需要明确解释的要点。
到 PostgreSQL 实例的远程连接的初始设置
如果你首先尝试从 COMPUTER 1
运行以下命令,你将收到错误消息。
postgres=# psql -U postgres -h [ip addr. of Computer 2]
输出:
psql: error: connection to server at "[ip addr. of Computer 2]", port 5432 failed: FATAL: no pg_hba.conf entry for host "[ip addr. of Computer 1]", user "postgres", database "postgres", no encryption
让我们首先尝试了解这里发生了什么。 -h [hostname]
指定运行数据库服务器的机器;因此,我们使用它来连接 PostgreSQL 的远程机器数据库。
它给出错误的原因是 pg_hba.conf
对我们的客户端计算机没有任何授权; COMPUTER 1
。这是客户端授权配置文件,它需要我们配置记录以允许从 COMPUTER 1
进行远程访问。
检查 PING TO [ip_addr of Computer 2]
是否在命令提示符下工作
在 CMD 中,键入以下命令。
ping [ip_addr of comp. 2]
如果你看到类似的内容。
这意味着从客户端到服务器的路由是开放的,反之亦然。我们将 IP 192.168.10.8
分配给 SERVER
并将 192.168.10.4
分配给 CLIENT
。
COMPUTER 1
现在指的是 CLIENT
,COMPUTER 2
指的是 SERVER
。例如,如果 PING
返回 REQUEST TIMED OUT
,请确保两台计算机上的端口都打开并且互联网连接正常。
转到 SERVER COMPUTER (2)
并修改 Pg_hba.conf
文件
你将能够在 PostgreSQL 安装的 data
文件夹中找到此文件。或者对于默认安装,路径是:
C:\Program Files\PostgreSQL\14\bin (or any version number in case of 14)
现在编辑这个 pg_hba.conf
文件并在 IPv4 Local Connections
标题下。
我们将在配置语句中添加 CLIENT
的 IP ADDRESS
。
host all all 192.168.10.4/24 md5
上面的 24
是指定的 CLIENT IP
的子网,METHOD
定义为 md5
。这将允许通过 md5
加密密码进行身份验证。
现在我们的第一步已经完成,我们可以继续进行第二个最重要的步骤,即启用远程访问。
转到 postgresql.conf
文件并更新设置
PostgreSQL 服务器被指定为在默认初始设置中侦听 localhost
地址或*
。但是,我们现在必须更改为远程访问提供的配置。
打开 Data
文件夹中的 postgresql.conf
文件,然后单击 Edit
。打开文件后,在 CONNECTIONS AND AUTHENTICATION
下,查找 listen_addresses = ''
。
如果你找到它,将其更改为以下内容。
listen_addresses = `192.168.10.4`
或者保留在*
。*
表示数据库现在将接受所有传入连接。
如果你只在此处填写客户端地址,则其他客户端将无法连接,除非你也指定它们。因此,最好使用*
。
再一次,192.168.10.4
是我们的 CLIENT PC
,192.168.10.8
是我们的 SERVER PC
。根据需要更改提供给你的陈述中的地址。
你现在可以关闭文件并重新启动 PostgreSQL 服务器以进行更改。
测试连接
回到 psql
命令提示符,再次尝试此语句。
postgres-# psql -U postgres -h 192.168.10.8
然后它会要求你输入 Postgres
的 PASSWORD
。请记住,此密码适用于 SERVER
端的数据库。
登录后,你现在可以访问每个数据库对象并根据需要执行查询。
我们将研究你在设置远程访问时可能遇到的一些基本问题。
修改 PostgreSQL 中远程访问的 QUERY
语句
在某些情况下,特定命令可能不起作用;你也可以使用以下语句。
psql -h 192.168.10.8 -p 5432 -U postgres
我们还将 PORT
定义为 5432
,为我们的 PostgreSQL 安装设置的默认 PORT
。
我们可以用来查询的另一个语句可能是:
psql -h 192.168.10.8 -p 5432 -U postgres -W
这里的 -W
要求 USER
提供密码。但是,此方法可能不会在所有情况下都运行,并且可能会返回 CONNECTION
错误。
PostgreSQL 中的远程访问可以允许不同机器上的多个用户访问公共数据库并运行查询。但是,此连接可能经常被防火墙问题或端口关闭中断,或者即使某些配置保持不变。
通常,无效的端口和访问协议会阻止用户访问,并且许多用户已经在其数据库文件中进行了预先存在的修改。
我们的更改是在具有干净文件系统的系统上运行的,后端文件没有其他修改。因此,在某些特殊情况下,即使是我们的解决方案也不适合你。
确保你的版本是最新的,Windows 不会阻止远程连接的任何重要访问,或者你的路由启用跨 LAN 通信。
我们希望你学会了如何为 PostgreSQL 设置远程访问,并具备这样做的基础知识并在以后执行你的修改。
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub