web-dev-qa-db-ja.com

PostgreSQLデータベースをEclipseに接続しようとしています

Centos 7マシンでPostgres(バージョン9.2)データベースを実行していて、データソースエクスプローラーを使用してWindows 10マシンのEclipse Oxygenから接続しようとしています。

Eclipseの[接続の詳細]画面にすべての情報を入力して[テスト接続]をクリックすると、次のエラーが発生します。

org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.Java:250)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.Java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.Java:195)
    at org.postgresql.Driver.makeConnection(Driver.Java:454)
    at org.postgresql.Driver.connect(Driver.Java:256)
    at org.Eclipse.datatools.enablement.internal.postgresql.PostgreSQLJDBCConnection.createConnection(PostgreSQLJDBCConnection.Java:87)
    at org.Eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.Java:105)
    at org.Eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.Java:54)
    at org.Eclipse.datatools.enablement.internal.postgresql.PostgreSQLJDBCConnection.<init>(PostgreSQLJDBCConnection.Java:47)
    at org.Eclipse.datatools.enablement.internal.postgresql.PostgreSQLConnectionFactory.createConnection(PostgreSQLConnectionFactory.Java:51)
    at org.Eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.Java:83)
    at org.Eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.Java:359)
    at org.Eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.Java:76)
    at org.Eclipse.datatools.connectivity.ui.PingJob.run(PingJob.Java:59)
    at org.Eclipse.core.internal.jobs.Worker.run(Worker.Java:56)
Caused by: Java.net.SocketTimeoutException: connect timed out
    at Java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at Java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at Java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at Java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at Java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at Java.net.PlainSocketImpl.connect(Unknown Source)
    at Java.net.SocksSocketImpl.connect(Unknown Source)
    at Java.net.Socket.connect(Unknown Source)
    at org.postgresql.core.PGStream.<init>(PGStream.Java:69)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.Java:152)
... 14 more

私はCentosとPostgresにかなり慣れていないので、これが何を意味するのか完全にはわかりません。接続するために入力した情報が正しいことを知っています。 WindowsからCentosマシンにpingでき、CentosからWindowsマシンにpingできます。 WindowsからPuTTYを使用してCentosマシンに接続することもできます。

前もって感謝します。

2
user156473

この行は問題を示しています:

Caused by: Java.net.SocketTimeoutException: connect timed out

経験則として、通常、Javaスタックトレースでは、最初の「原因」(最後に出力)が必要です。

Win10はCentOSのpostgresqlに接続できません。 PostgreSQLは通常、TCPポート5432を使用します。

接続タイムアウトエラーが発生します。つまり、win10は完全に応答しません。何もない。 postgresqlが接続を許可しない場合、またはpostgresqlがtcpポート5432で待機しない場合は、「認証エラー」または「接続拒否」エラーが発生しました。

しかし、あなたのwin10は何も得ず、エラーも起こしません。サーバーが存在しないかのように。

あなたはあなたのpostgresqlの可用性をチェックすることができます

telnet your.centos.ip 5432

コマンド。

あなたの問題の最も可能性の高い原因は、centosのデフォルトのファイアウォール設定が5432ポートを単にフィルターにかけることです。それを有効にします。

2番目に考えられる原因は、誤ったIPを入力したことです。

その問題を解決した場合、

  1. あなたのtelnetコマンドはハングアップしません
  2. あなたのJavaソフトウェアが接続するか、少なくともそれは別のエラーになります(認証エラーまたは接続拒否が最も可能性が高いです)。

ネットワーク上でpostgresqlを待機させるには、ファイアウォール構成の他にいくつかの異なる設定も必要です。

  • ローカルホストだけでなく、すべてのIPアドレスをリッスンするようにpostgresqlを設定する必要があります。これは、listen_addressespostgresql.conf行で実行できます。
  • pg_hba.confで認証(md5パスワードが最も可能性が高い)を設定する必要があります。

まず pgadmin やコマンドラインpsqlツールなどのクライアントとpostgresqlを接続します(cygwinにも付属しています)。それが機能した後、Javaから接続するためにプレイしてください。