[英]No Route to Host Exception - Attempting to Remote Connect to Postgresql Database
我目前正在嘗試通過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
我得到的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
刪除#
,現在一切正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.