使用 psql 允许远程连接到 PostgreSQL 数据库
安装 PostgreSQL 时,默认情况下不允许使用 TCP/IP 连接到数据库。
当您尝试使用 psql 命令从客户端连接到远程 PostgreSQL 数据库时,您可能会收到“psql:无法连接到服务器:连接被拒绝”错误消息。
在以下示例中,我们尝试从客户端计算机连接到在 192.168.102.1 服务器上运行的 PostgreSQL 数据库。正如您从输出中看到的,它清楚地表明远程 PostgreSQL 数据库不接受连接。
# psql -U postgres -h 192.168.102.1
psql: could not connect to server: Connection refused
Is the server running on host "192.168.102.1" and accepting
TCP/IP connections on port 5432?
要为 PostgreSQL 数据库启用 TCP/IP 连接,您需要遵循以下两个步骤。
1.修改pg_hba.conf添加Client Authentication Record
在 PostgreSQL 数据库服务器上,默认情况下,您会注意到 /var/lib/pgsql/data/pg_hba.conf 末尾的以下记录。如下所示,它只接受来自本地主机的连接。
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 ident
将以下行添加到 pg_hba.conf 服务器。这将允许来自“192.168.101.20” ip-address 的连接(这是我们示例中的客户端)。如果要允许来自特定网络上的多个客户端计算机的连接,请在此处以 CIDR 地址格式指定网络地址。
# vi /var/lib/pgsql/data/pg_hba.conf
host all all 192.168.101.20/24 trust
以下是 pg_hba.conf 文件中支持的各种客户端认证记录格式。我们正在使用此列表中的#2 格式。
- 本地数据库用户身份验证方法 [身份验证选项]
- 主机数据库用户 CIDR-address authentication-method [authentication-option]
- hostssl 数据库用户 CIDR-address authentication-method [authentication-option]
- hostnossl 数据库用户 CIDR-address authentication-method [authentication-option]
除了“CIDR-address”格式,您还可以使用以下记录格式在单独的字段中指定 ip-address 和网络掩码。
- 主机数据库用户IP地址IP掩码认证方法[认证选项]
- hostssl 数据库用户 IP 地址 IP 掩码 身份验证方法 [身份验证选项]
- hostnossl 数据库用户 IP-address IP-mask authentication-method [authentication-option]
2.修改postgresql.conf中的监听地址
在 PostgreSQL 数据库服务器上,默认情况下,监听地址将是 postgresql.conf 文件中的 localhost,如下所示。
# grep listen /var/lib/pgsql/data/postgresql.conf
listen_addresses = 'localhost'
修改这一行并给出 *. 如果服务器上有多个接口,还可以指定一个特定的接口来监听。
# grep listen /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'
3.测试远程连接
现在,登录到客户端机器 192.168.101.20,并执行 psql 远程连接到 PostgreSQL 数据库服务器(192.168.102.1),如下所示。这一次,它应该工作。
# psql -U postgres -h 192.168.102.1
Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal.
postgres=#
另外,如果您不想每次都在命令行参数中指定主机名,您可以在 PGHOST 环境变量名称中设置远程 PostgreSQL 数据库 ip-address,如下所示。
# export PGHOST=192.168.102.1
# psql -U postgres
Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal.
postgres=#
- 点赞
- 收藏
- 关注作者
评论(0)