关于postgresql:如何避免缓存的计划一定不能更改结果类型错误?

 2021-04-26 

How to avoid cached plan must not change result type error?

本问题已经有最佳答案,请猛点这里访问。

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

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

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

或者我必须更改所有SQL语句以指定将要操作的列的确切列表。因此,编写" SELECT * FROM TABLE"之类的语句是不可行的。

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


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

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