使用 postgresql-9.4.1212.jar 中包含的 jdbc4.2 实现,在与 postgresql 9.3 数据库的连接上调用 java.Sql.Connection isValid() 方法时生成错误(java8 和 postgres 都在 Windows 7 上运行) .
产生错误的路径很复杂但可重现(将很快提供相关代码),并且涉及单个数据库连接上的一系列 sql 调用,其默认模式在每次使用之前通过显式执行SET SEARCH_PATH='[some schema]'
.
我发现当且仅当我SEARCH_PATH
使用大写呈现关键字时才会发生错误(也就是说,如果我执行,则不会发生错误SET search_path='[some schema]'
- 仅当我执行时SET SEARCH_PATH='[some schema]'
)。
请注意,执行任一变体的直接效果是相同的——在这两种情况下,与连接关联的默认模式都更改为 [某些模式]。只是,java.sql.connection.isValid()
如果我使用 SEARCH_PATH 而不是 search_path,最终,下游调用会导致数据库崩溃。
我可以看到 jdbc 驱动程序对 java.sql.connection.setSchema() 的实现使用了小写变体;这让我觉得这种明显的区分大小写可能是一个已知问题,但我在网上的任何地方都没有提到它。
请注意,如果我:(1)在我的 9.3 数据库中使用较旧的 jdbc 驱动程序(postgresql-9.3.1100.jdbc4.1.jar),或者(2)在 postgresql 9.6 中使用最新的 jdbc 驱动程序,则不会出现此问题数据库。
我想知道是否有人遇到过这个特定问题,以及是否还有其他已知的不兼容 9.3 数据库和最新的 jdbc 驱动程序。