簡體   English   中英

沒有路由到主機異常-嘗試遠程連接到Postgresql數據庫

[英]No Route to Host Exception - Attempting to Remote Connect to Postgresql Database

我目前正在嘗試通過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 我得到的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刪除# ,現在一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM