我目前正在尝试通过Java程序远程连接到Postgresql。我让 JDBC 驱动程序工作,但是当我尝试连接到数据库时,连接失败并且出现java.net.NoRouteToHostException: No route to host (Host unreachable)
错误。
到目前为止,我已经进行了以下尝试来解决问题:
-
在包含 postgresql 数据库的服务器上,我更改了 pg_hba.conf 以包含尝试连接的设备的 IP 地址:
# IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.25.170/32 trust
-
我还更新了postgresql.conf,以便
#listen_addresses = 'localhost'
更改为#listen_addresses = '*'
根据建议将编辑更改为listen_addresses = '*'
我已经多次重新启动计算机,但仍然收到错误。我注意到的一件事是,当我表演sudo netstat -nlp | grep postgres
时,我会得到:
`tcp 0 0 0.0.0.0:5433 0.0.0.0:* LISTEN 1309/postgres
tcp6 0 0 :::5433 :::* LISTEN 1309/postgres
unix 2 [ ACC ] STREAM LISTENING 20873 1309/postgres /tmp/.s.PGSQL.5433`
这让我感到困惑,因为我知道 postgres 的默认端口应该是 5432,我很好奇,如果这不是我遇到问题的默认端口?
编辑请注意,我已经在本地运行代码以访问数据库,并且在本地它运行得很好。当我编辑要远程访问的代码时,是发生错误的时候。这是java代码:
public class HdfsTransferToDatabase {
public static void main(String[] args) throws SQLException {
//SQLData sql = new SQLData();
System.out.println("---------- PostgreSQL JDBC Connection Testing ----------");
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your PostgreSQL JDBC Driver? "
+ "Include it in your library path.");
e.printStackTrace();
return;
}
System.out.println("---------- PostgreSQL JDBC Driver Registered ----------");
Connection connection = connect();
if(connection != null) {
System.out.println("---------- Connection Successful for PostgreSQL ----------");
//sql.viewTable(connection);
} else {
System.out.println("---------- Connection Failed for PostgreSQL ----------");
}
}
private static Connection connect() {
//Connection string
String url = "jdbc:postgresql://192.168.25.179:5433/gisdb";
Connection conn = null;
try {
conn = DriverManager.getConnection(
url, "testuser", "testpassword");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console.");
e.printStackTrace();
}
return conn;
}
}
任何帮助将不胜感激!
引起我注意的是你对postgresql.conf的更改。如果您真的将行更改为#listen_addresses = '*'
,这可能是问题所在。行首的#
将行标记为注释,因此不起作用,侦听地址默认为localhost
。
因此,请尝试在postgresql.conf中删除listen_address
前面的#
:
listen_addresses = '*'
就我个人而言,我认为我的 Postgres 的安装出了点问题。尽管pg_hba.conf
更新为 postgres 使用端口 5432,但它实际上并没有使用此端口,并且端口 5433 不允许我访问任何内容。
我通过这个过程删除了我的 Postgres:
yum remove postgres*
mv /var/lib/pgsql /var/lib/old.pgsql
然后我使用这些说明重新安装 postgres,除了我使用以下 yum 存储库来安装 9.5.3 而不是 9.4。
http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
请注意,我使用的是 Centos 7 x64。
我像以前一样对pg_hba.conf
和postgresql.conf
进行了更改,确保我从postgresql.conf
中取出#
,现在一切正常!