Pertanyaan Postgres: “ERROR: rencana tembolok tidak boleh mengubah jenis hasil”


Pengecualian ini sedang dilemparkan oleh server PostgreSQL 8.3.7 ke aplikasi saya. Apakah ada yang tahu apa arti kesalahan ini dan apa yang dapat saya lakukan?

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

76
2018-05-06 19:23


asal


Jawaban:


Saya tahu apa yang menyebabkan kesalahan ini.

Aplikasi saya membuka koneksi database dan menyiapkan pernyataan SELECT untuk eksekusi.

Sementara itu, skrip lain memodifikasi tabel database, mengubah tipe data dari salah satu kolom yang dikembalikan dalam pernyataan SELECT di atas.

Saya menyelesaikan ini dengan me-restart aplikasi setelah tabel database dimodifikasi. Ini mengatur ulang koneksi database, memungkinkan pernyataan siap untuk mengeksekusi tanpa kesalahan.


132
2018-05-06 20:52



Saya menambahkan jawaban ini untuk siapa pun yang mendarat di sini dengan googling ERROR: cached plan must not change result type.

Anda dapat menghindari masalah ini dengan mengkonfigurasi pgjdbc driver dengan autosave=conservative. Dengan opsi ini, Anda tidak perlu memantulkan server Anda atau menyiram kolam koneksi Anda atau solusi apa pun yang mungkin Anda miliki.

Direproduksi pada Postgres 9.6 (AWS RDS) dan pengujian awal saya tampaknya menunjukkan masalah benar-benar diselesaikan dengan opsi ini.

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

Anda dapat melihat pgjdbc  Masalah Github 451 untuk detail selengkapnya dan riwayat masalah.

Perhatikan bahwa, sesuai masalah kinerja yang dilaporkan di tautan di atas - Anda harus melakukan beberapa pengujian kinerja / beban / rendam aplikasi Anda sebelum menyalakannya secara membabi buta.


3
2018-01-31 07:05