无到主机的路由异常 - 尝试远程连接到 Postgresql 数据库



我目前正在尝试通过Java程序远程连接到Postgresql。我让 JDBC 驱动程序工作,但是当我尝试连接到数据库时,连接失败并且出现java.net.NoRouteToHostException: No route to host (Host unreachable)错误。

到目前为止,我已经进行了以下尝试来解决问题:

  1. 在包含 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

  2. 我还更新了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.confpostgresql.conf进行了更改,确保我从postgresql.conf中取出#,现在一切正常!

相关内容

  • 没有找到相关文章

最新更新