1. 问题的现象

笔者最近发现使用jdbc无法连接PostgreSQL数据库,而通过psql命令行工具却可以连接,这真是一个诡异的问题。

jdbc连接PostgreSQL的报错信息如下:

jdbc无法连接postgres的截图

报错信息为“尝试连线已失败”。

但是通过psql却能够连接,如下图所示:

psql可以连接postgres的截图

2. 问题的解决

开始时真是摸不到头脑,检查了jdbc的IP地址和端口,发现肯定不是输入错了,IP地址和端口都是正确的。同时检查了PostgreSQL服务端的pg_hba.conf,也没有发现问题,当然理论上psql可以连接就不是pg_hba.conf的问题,但不管了,都检查一下再说。

左看右看,都没有找到原因。这时回想以前通过jdbc是可以连接到PostgreSQL,为什么这几天连接不上了呢?通过回想,这几天使用了一些网络代理软件,看看是不是因为这些代理软件导致的,检查mac电脑的网络配置,发现了一个如下配置:

mac电脑socks代理配置

把上图socks代理的勾去掉后,发现jdbc就可以连接上了。果然是这个原因,终于把问题找到了。

问题原因猜测是在macos下jdbc的网络连接会被socks代理拦截。

3. 其它

如果你用intellj idea或pycharm等工具连接PostgreSQL时,也发现无法连接时,也请检查是否是这个问题,因为这些工具也是用jdbc连接PostgreSQL数据库的。

0 评论  
添加一条新评论