使用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行。
我找不到能描述这一点的问题。请自己看一看,如果需要的话可以养一只。