我目前正在尝试通过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;
}
}
非常感谢任何帮助!
答案 0 :(得分:0)
引起我注意的是你对postgresql.conf的更改。如果您确实将行更改为#listen_addresses = '*'
,则可能是问题所在。该行开头的#
将该行标记为注释,因此它无效,并且监听地址默认为localhost
。
请尝试删除postgresql.conf中#
前面的listen_address
:
listen_addresses = '*'
答案 1 :(得分:0)
在我个人的情况下,我认为安装Postgres时出现了问题。尽管pg_hba.conf
更新了postgres以使用端口5432,但它实际上并没有使用此端口,并且端口5433不允许我访问任何内容。
我通过这个过程删除了Postgres:
yum remove postgres\*
mv /var/lib/pgsql /var/lib/old.pgsql
然后我使用这些instructions来重新安装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
,现在一切正常!