如何避免缓存计划不得更改结果类型错误?

时间:2017-02-08 17:05:59

标签: postgresql jdbc

假设我想在表格中添加一列。如果我在DB中添加列而不重新启动应用程序,则我的应用程序开始失败,“缓存计划不能更改结果类型”,因为在此列添加后执行通配符选择的查询的返回类型更改。

jdbc postgres驱动程序在某个阈值后自动创建预准备语句,默认阈值为5。

要么我可以通过将prepareThreshold设置为0来禁用它,这是不好的,因为我失去了预备语句优化驱动程序为我做的好处。

或者我必须更改所有SQL语句以指定它将操作的列的确切列表。因此,编写像“SELECT * FROM TABLE”这样的语句是不可行的。

有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

在SQL查询中使用*是一个坏习惯(在count(*)之类的某些情况下除外),因为查询可能会突然失败或在添加列时表现不同。

如果你真的想要它,你可以捕获异常,关闭预准备语句并重新创建一个具有相同查询字符串的新语句。