PostgreSQL 8.3.7服务器将此异常抛给我的应用程序.有谁知道这个错误意味着什么,我能做些什么呢?
ERROR: cached plan must not change result type
STATEMENT: select code,is_deprecated from country where code=$1
Run Code Online (Sandbox Code Playgroud)
Jin*_*Kim 169
我弄清楚是什么导致了这个错误.
我的应用程序打开了一个数据库连接并准备了一个SELECT语句来执行
同时,另一个脚本正在修改数据库表,更改上面SELECT语句中返回的其中一列的数据类型.
我通过在修改数据库表后重新启动应用程序来解决此问题.这会重置数据库连接,允许预准备语句无错误地执行.
Sho*_*orn 19
我正在通过谷歌搜索为这里的任何人添加这个答案ERROR: cached plan must not change result type.
您可以通过配置pgjdbc驱动程序来避免此问题autosave=conservative.使用此选项,您不必退回服务器或刷新连接池或您可能提出的任何解决方法.
在Postgres 9.6(AWS RDS)上重现,我的初始测试似乎表明此选项完全解决了问题.
文档:https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters
您可以查看pgjdbc Github问题451以获取更多详细信息和问题的历史记录.
请注意,根据上述链接中报告的性能问题 - 在盲目切换之前,您应该对应用程序进行一些性能/负载/浸泡测试.
小智 5
对于我们来说,我们面临着类似的问题。我们的应用程序适用于多种模式。每当我们进行架构更改时,这个问题就开始出现。
在 JDBC 参数中设置prepareThreshold=0参数会禁用数据库级别的语句缓存。这为我们解决了这个问题。
| 归档时间: |
|
| 查看次数: |
37325 次 |
| 最近记录: |