无法使用JDBC驱动程序连接到远程PostgresSQL服务器。

问题描述 投票:0回答:1

我试图使用JDBC连接到远程PostgreSQL数据库,但是连接超时。为了能够访问远程服务器,我连接到了一个隧道。当我试图从同一网络使用JDBC连接时,没有问题,只是远程连接。

我可以使用其他工具(如pgAdmin,HeidiSQL,python sqlalchemypsycopg2)远程和本地连接到数据库,但不能使用JDBC。我不需要添加其他工具的远程连接选项,只需要添加host:port和userpass。

在寻找解决方案的过程中,我尝试了以下方法,但没有成功。

  • 添加属性 "ssl" 有价值 "true" 驱动器连接
  • 增添财产 "sslfactory" 有价值 "org.postgresql.ssl.NonValidatingFactory"
  • 增添财产 "loginTimeout" 有价值 20
  • 设置 listen_addresses = '*'postgresql.conf 在远程服务器上
  • 增加 host all all 0.0.0.0/0 md5pg_hba.conf 在远程服务器上

使用驱动版本 postgresql-42.2.14. 我试图使用SQuirreL和MATLAB进行连接。

由于其他工具没有问题连接,我猜测这是关于调整JDBC设置.我在这里错过了什么?

编辑:尝试ping远程服务器的IP(192.168.x.x.),我得到。

Reply from 10.x.x.x: Destination net unreachable.

同时,我可以在同一个服务器IP上连接到数据库。这是不是问题的线索?

连接网址。jdbc:postgresql://192.168.x.x:5432/<dbname>

结果是... Test-NetConnection

PS > Test-NetConnection 192.168.x.x
WARNING: Ping to 192.168.x.x failed with status:
DestinationNetworkUnreachable                                         
PS > Test-NetConnection 192.168.x.x -port 5432                                                     

ComputerName     : 192.168.x.x
RemoteAddress    : 192.168.x.x
RemotePort       : 5432
InterfaceAlias   : Local Area Connection 3
SourceAddress    : 192.168.x.x
TcpTestSucceeded : True

跑步 tracert 192.168.x.x

  Tracing route to 192.168.x.x over a maximum of 30 hops

  1    <1 ms    <1 ms    <1 ms  192.168.0.1
  2  10.x.x.x  reports: Destination net unreachable.

Trace complete.

Stacktrace(SQuirreL)。

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:81)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:93)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:197)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:217)
    at org.postgresql.Driver.makeConnection(Driver.java:458)
    at org.postgresql.Driver.connect(Driver.java:260)
    at net.sourceforge.squirrel_sql.fw.sql.SQLDriverManager.getConnection(SQLDriverManager.java:147)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:136)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.lambda$execute$0(OpenConnectionCommand.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
postgresql jdbc
1个回答
0
投票

你ping的IP地址范围是192.168.x.x,但得到的回复却是10.x.x.x.x,这是两个不同的子网。

虽然看起来很奇怪,但这与你最初说的可以通过其他方式连接的说法并不一致。如果网络是问题,那么其他工具也会失败。如果有阻塞,ping "请求超时 "得不到回复是预料中的结果。

"Destination unreachable "意味着没有合适的路由可以到达你试图到达的IP。有了这个问题,从你的主机上应该无法连接到该主机的其他连接。

请确认你尝试的所有连接是否来自同一个客户端主机。另外,你是否尝试过ODBC连接器,看看是否有效?它允许系统DSN,你不需要做太多的尝试来连接。

请确保您从同一主机或同一网络上的两台机器进行测试,以简化事情。

对于 "Destination unreachable "的错误,如果使用相同的目标IP,你的客户端无论如何都不应该与服务器对话。

© www.soinside.com 2019 - 2024. All rights reserved.