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

aam*_*mir 2 postgresql jdbc

假设我想在表中添加一列。如果我在数据库中添加列而不重新启动应用程序,我的应用程序将开始失败,并显示“缓存计划不得更改结果类型”,因为在添加此列后执行通配符选择的查询的返回类型会发生变化。

jdbc postgres 驱动程序在一定阈值后自动创建准备好的语句,默认阈值为 5。

我可以通过将prepareThreshold设置为0来禁用它,这很糟糕,因为我失去了准备好的语句优化驱动程序为我带来的好处。

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

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

Lau*_*lbe 5

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

如果您确实想要这样做,您可以捕获异常,关闭准备好的语句并使用相同的查询字符串重新创建一个新语句。