Postgres: "ошибка: кэшированный план не должен изменять тип результата"
это исключение создается сервером PostgreSQL 8.3.7 для моего приложения. Кто-нибудь знает, что означает эта ошибка и что я могу поделать?
ERROR: cached plan must not change result type
STATEMENT: select code,is_deprecated from country where code=
2 ответов
Я понял, что вызвало эту ошибку.
мое приложение открыло соединение с базой данных и подготовило инструкцию SELECT для выполнения.
тем временем другой скрипт изменял таблицу базы данных, изменяя тип данных одного из столбцов, возвращаемых в приведенной выше инструкции SELECT.
Я решил это, перезапустив приложение после изменения таблицы базы данных. Это сбросит подключение к базе данных, что позволит подготовить инструкцию выполнить без ошибок.
Я добавляю этот ответ для тех, кто приземляется здесь, погуглив ERROR: cached plan must not change result type
.
вы можете избежать этой проблемы путем настройки pgjdbc
водителем с autosave=conservative
. С помощью этой опции вам не придется отказов сервера или очистить пул соединений или любой обходной путь вы, возможно, придумали.
воспроизводится на Postgres 9.6 (AWS RDS), и мое первоначальное тестирование, похоже, указывает, что проблема полностью решена с помощью этой опции.
документация: https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters
вы можете посмотреть на pgjdbc
GitHub выпуск 451 для более подробной информации и истории вопроса.
обратите внимание, что в соответствии с сообщенными проблемами производительности в приведенной выше ссылке - вы должны сделать некоторое тестирование производительности / нагрузки / замачивания вашего приложения перед включением вслепую.