SchemaSpy对接PostgreSQL 8.0.2报错求助:版本兼容与连接问题
解决SchemaSpy v6.2.2分析PostgreSQL 8.0.2的两类报错步骤
一、使用postgresql-42.6.0.jar时的报错(Unsupported Server Version + type 'e' does not exist)
原因
PostgreSQL 8.0.2是超老旧版本(2005年发布),postgresql-42.x系列驱动已停止对PostgreSQL 8.0及更早版本的支持,驱动内部执行的查询会用到8.0不存在的语法/类型(比如报错中的type 'e',对应后期版本的枚举类型相关查询)。
解决步骤
- 降级JDBC驱动到支持PostgreSQL 8.0的最高兼容版本:官方驱动中,支持8.0的最后一个稳定大版本是
postgresql-9.4.1212.jar(JDBC4版本,兼容Java 6+),避免使用过于老旧的postgresql-8.0-325.jdbc3.jar。 - 修改执行命令的
-dp参数替换驱动路径:
java -jar schemaspy-6.2.2.jar \ -s public -db <databasename> -u <username> -p <password> \ -host <host> -o /tmp \ -dp /usr/share/java/postgresql-9.4.1212.jar \ -debug
- 若仍有兼容性问题,可将SchemaSpy降级到v5.x系列(比如v5.0.0),v5.x对老旧数据库的适配性更好,搭配上述支持8.0的JDBC驱动使用。
二、使用postgresql-8.0-325.jdbc3.jar时的报错(no pg_hba.conf entry for ... SSL off)
原因
该老版本JDBC驱动默认不启用SSL连接,而你的PostgreSQL服务器pg_hba.conf中未配置允许当前客户端IP以非SSL方式连接的规则,导致连接被拒绝。
解决步骤
方案1:修改JDBC连接参数强制启用SSL
在SchemaSpy命令中添加-connprops参数指定SSL属性:
java -jar schemaspy-6.2.2.jar \ -s public -db <databasename> -u <username> -p <password> \ -host <host> -o /tmp \ -dp /usr/share/java/postgresql-8.0-325.jdbc3.jar \ -connprops "ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory" \ -debug
注:
NonValidatingFactory用于跳过SSL证书验证,若服务器有合法SSL证书,可仅保留ssl=true。
方案2:修改PostgreSQL服务器的pg_hba.conf配置
- 登录PostgreSQL服务器,找到
pg_hba.conf文件(通常路径为/var/lib/pgsql/data/或/etc/postgresql/8.0/main/)。 - 在文件靠前位置添加允许客户端IP非SSL连接的规则(规则匹配从上到下,优先匹配靠前的规则):
host <databasename> <username> 10.131.11.212/32 md5
替换
<databasename>、<username>为实际值,10.131.11.212为你的客户端IP,也可使用网段如10.131.11.0/24允许整个网段连接。
- 重启PostgreSQL服务使配置生效,命令通常为
service postgresql restart或/etc/init.d/postgresql restart。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

