2010-05-06 27 views
70

PostgreSQL 8.3.7服務器將此異常拋出到我的應用程序。 有誰知道這個錯誤的含義和我能做些什麼嗎?Postgres:「錯誤:緩存計劃不能更改結果類型」

ERROR: cached plan must not change result type 
STATEMENT: select code,is_deprecated from country where code=$1 
+0

你能分享一下PostreSQL的確切版本嗎? 8.3.X? – 2010-05-06 20:49:26

回答

123

我想清楚是什麼導致了這個錯誤。

我的應用程序打開了一個數據庫連接並準備了一個SELECT語句來執行。

與此同時,另一個腳本正在修改數據庫表,更改上述SELECT語句中返回的其中一列的數據類型。

我在修改數據庫表後通過重新啓動應用程序解決了這個問題。這會重置數據庫連接,從而使準備好的語句無錯地執行。

+3

我在PostgreSQL 9.0.4上使用Ruby on Rails 3.1-pre5。這似乎應該由ActiveRecord自動處理,不是嗎? – 2011-08-07 17:49:13

+3

是的,我希望ActiveRecord最終會照顧到這一點。如果你想避免重新啓動,我相信調用MyModel.reset_column_information將在短期內解決問題。 – nertzy 2011-09-20 14:32:33

+0

對我來說還是沒變...... – alanjds 2012-09-06 18:55:30

1

我給任何人通過Google搜索ERROR: cached plan must not change result type加入這個答案。

您可以通過0123'配置pgjdbc驅動程序來避免此問題。有了這個選項,你不應該反彈你的服務器或刷新你的連接池或任何你可能想出的解決方法。

在Postgres 9.6(AWS RDS)上轉載,我的初始測試似乎表明問題已完全用此選項解決。

文檔:https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters

你可以看一下pgjdbcGithub issue 451該問題的更多細節和歷史。