对9.3数据库使用postgresqljdbc4.2驱动程序的连接验证错误——SEARCH_PATH关键字明显区分大小写



使用postgresql-9.4.1212.jar中包含的jdbc4.2实现,我在调用java时生成了一个错误。Sql.Connection isValid()方法连接到postgresql9.3数据库(java8和postgres都在Windows7上运行)。

产生错误的路径很复杂,但可重复(将很快提供相关代码),并且涉及对单个数据库连接的一系列sql调用,该连接的默认模式在每次使用之前通过显式执行SET SEARCH_PATH='[some schema]'进行重新配置。

我发现,当且仅当我使用大写呈现SEARCH_PATH关键字时,才会发生错误(即,如果我执行SET search_path='[some schema]',则不会发生错误-仅当我执行SET SEARCH_PATH='[some schema]'时)。

请注意,执行任一变体的直接效果是相同的——在这两种情况下,与连接相关的默认模式都更改为[some-schema]。只是,如果我使用了SEARCH_PATH而不是SEARCH_PATH,那么对java.sql.connection.isValid()的下游调用最终会导致数据库崩溃。

我可以看到jdbc驱动程序对java.sql.connection.setSchema()的实现使用了小写变体;这让我认为这种明显的案件敏感性可能是一个已知的问题,但我在网上没有发现任何提及。

请注意,如果我:(1)在9.3数据库中使用较旧的jdbc驱动程序(postgresql-9.3.1100.jdbc4.1.jar),或者(2)在postgresql9.6数据库中使用最新的jdbc驱动器,则不会出现问题。

我想知道是否有人遇到过这个特定的问题,以及9.3数据库和最新的jdbc驱动程序是否存在其他已知的不兼容性。

驱动程序无法使准备好的语句缓存无效,因为它只在config参数为小写时检测到SET search_path=...

请参阅此提交的第2056行。

我找不到能描述这一点的问题。请自己看一看,如果需要的话可以养一只。

相关内容

  • 没有找到相关文章

最新更新