Postgres远程连接-Windows Server

时间:2019-03-12 01:44:11

标签: postgresql remote-access pg-hba.conf

我在pg_hba.conf中有以下几行。 Postgres已安装在Windows服务器上。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
#host   all             all             myip            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

我只允许从另一个公共IP地址进行连接。我该如何实现?一旦启用以上IP,Postgres就不会启动。

正在寻找一些指导。

2 个答案:

答案 0 :(得分:0)

我在几台Windows服务器(Windows Server 2012 R2,Windows Server 2016)上运行postgres,作为在Apache tomcat Web服务器上运行的商业框架的一部分。本地连接工作正常。但是,我希望同一postgres服务器可用于同一服务器场中另一台服务器(Red Hat Enterprise Linux)上的另一框架(Cakephp)。在我升级到postgres 9之前,它一直都起作用。现在,我不得不升级到postgres10。无论我尝试什么,都失败了。 这是我为解决问题所做的工作: 查找您的本地postgres配置文件。在我的情况下,它们通常与postgres表空间位于同一目录中: d:\ PG10Data \ postgresql.conf。 该文件必须包含以下几行:

# - Connection Settings:
listen_addresses = '*'  # what IP addresses/interfaces to listen on
port = 5432

下一个要修改的文件是pg_hba.conf(hba =基于主机的访问):

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# some sample entries:
# this will open UP ALL REMOTE IPv4 connections, do not open up permanently
host    all             all             0.0.0.0/0               md5
# only 1 database for 1 user from 1 IPv4 address:
host    yourdatabasename    yourusername        10.15.17.13/32          md5
# don not forget the "/32", otherwise the postgres server will not start up!

编辑这些文件后,重新启动postgres服务器。 您可以运行

netstat -a -n | findstr 5432

查看postgres侦听器是否正在运行。

您还可以从Windows命令提示符运行以下命令来测试连接性:

psql -Uyourusername -dyourdatabasename -p5432 -hlocalhost

这应该可以随时使用。下一级别将是使用计算机的本地IPv4地址。您可以通过

找到答案
ipconfig

这将告诉您您的本地IPv4地址。在以下命令中使用它:

psql -Uyourusername -dyourdatabasename -p5432 -hyourlocalip

我的问题是,此命令失败。由于我直接在服务器上运行它,因此它不可能是本地Windows防火墙。

解决方案: 有第二个配置文件: d:\ PG10Data \ postgresql.auto.conf 该文件从下面两行开始不祥:

# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command

它结束了:

listen_addresses = 'localhost'

当我通过psql作为postgres在本地登录时,尝试了ALTER SYSTEM命令,但没有成功。 最后,我厚颜无耻地将d:\ PG10Data \ postgresql.auto.conf中的条目更改为;

listen_addresses = '*'

宾果! postgres重新启动后,远程访问在两台Windows服务器上都像超级按钮一样工作。

N。 B.不要忘记Windows防火墙:打开端口5432进行远程访问。还要检查网络中是否没有防火墙,阻止从您的远程客户端访问端口5432的端口。

如果有人能够告诉我如何在不编辑postgresql.auto.conf的情况下更改参数,那将是很好的选择,但是至少我的两个框架(在本地和远程服务器上)都在工作。

答案 1 :(得分:0)

要打开端口5432,请编辑/Program Files/PostgreSQL/10/data/postgresql.conf并更改

# Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;

/Program Files/PostgreSQL/10/data/pg_hba.conf

# IPv4 local connections:
host    all             all             0.0.0.0/0           md5

现在重新声明Postgres服务器使用cmd

pg_ctl -D "C:\Program Files\PostgreSQL\10\data" restart