2010-05-06 23 views
70

Ngoại lệ này đang được máy chủ PostgreSQL 8.3.7 đưa vào ứng dụng của tôi. Có ai biết lỗi này có nghĩa gì không và tôi có thể làm gì?Postgres: "L ERI: kế hoạch được lưu trong bộ nhớ cache không được thay đổi loại kết quả"

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

Bạn có thể chia sẻ phiên bản chính xác của PostreSQL không? 8.3.X? –

Trả lời

123

Tôi đã tìm ra nguyên nhân gây ra lỗi này.

Ứng dụng của tôi đã mở kết nối cơ sở dữ liệu và đã chuẩn bị câu lệnh SELECT để thực thi.

Trong khi đó, một tập lệnh khác đang sửa đổi bảng cơ sở dữ liệu, thay đổi kiểu dữ liệu của một trong các cột được trả về trong câu lệnh SELECT ở trên.

Tôi đã giải quyết vấn đề này bằng cách khởi động lại ứng dụng sau khi bảng cơ sở dữ liệu được sửa đổi. Điều này đặt lại kết nối cơ sở dữ liệu, cho phép câu lệnh chuẩn bị thực hiện mà không có lỗi.

+3

Tôi nhận được điều này trên PostgreSQL 9.0.4, với Ruby on Rails 3.1-pre5. Có vẻ như điều này sẽ được xử lý tự động bởi ActiveRecord, phải không? –

+3

Vâng, tôi hy vọng rằng ActiveRecord cuối cùng sẽ chăm sóc điều này. Tôi tin rằng việc gọi MyModel.reset_column_information sẽ khắc phục mọi thứ trong thời gian ngắn nếu bạn muốn tránh khởi động lại. – nertzy

+0

Vẫn không có thay đổi đối với tôi ... – alanjds

1

Tôi đang thêm câu trả lời này cho bất kỳ ai đến đây bằng cách googling ERROR: cached plan must not change result type.

Bạn có thể tránh sự cố này bằng cách định cấu hình trình điều khiển pgjdbc với autosave=conservative. Với tùy chọn này, bạn không cần phải trả lại máy chủ của mình hoặc xóa hồ bơi kết nối hoặc bất kỳ giải pháp nào mà bạn có thể gặp phải.

Đã sao chép trên Postgres 9.6 (AWS RDS) và thử nghiệm ban đầu của tôi dường như cho biết sự cố đã được giải quyết hoàn toàn với tùy chọn này.

Tài liệu: https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters

Bạn có thể ghé qua pgjdbcGithub issue 451 để biết thêm chi tiết và lịch sử của vấn đề.

Các vấn đề liên quan