1

使用 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 驱动程序。

4

1 回答 1

0

驱动程序无法使准备好的语句缓存无效,因为它仅检测SET search_path=...配置参数何时为小写。

请参阅此提交的第 2056 行。

我找不到描述这个的问题。请自己看一下,如果需要,请提出一个。

于 2017-01-19T20:35:26.527 回答