Pregunta Postgres: "ERROR: plan en caché no debe cambiar el tipo de resultado"


Esta excepción está siendo lanzada por el servidor PostgreSQL 8.3.7 a mi aplicación. ¿Alguien sabe lo que significa este error y qué puedo hacer al respecto?

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

76
2018-05-06 19:23


origen


Respuestas:


Descubrí qué estaba causando este error.

Mi aplicación abrió una conexión de base de datos y preparó una instrucción SELECT para su ejecución.

Mientras tanto, otro script estaba modificando la tabla de la base de datos, cambiando el tipo de datos de una de las columnas que se devuelve en la declaración SELECT anterior.

Resolví esto reiniciando la aplicación después de que la tabla de la base de datos fue modificada. Esto restablece la conexión de la base de datos, permitiendo que la declaración preparada se ejecute sin errores.


132
2018-05-06 20:52



Estoy agregando esta respuesta para cualquiera que aterrice aquí buscando en Google ERROR: cached plan must not change result type.

Puede evitar este problema configurando su pgjdbc conductor con autosave=conservative. Con esta opción, no debería tener que volcar su servidor o purgar su grupo de conexiones o la solución alternativa que haya surgido.

Reproducido en Postgres 9.6 (AWS RDS) y mi prueba inicial parece indicar que el problema está completamente resuelto con esta opción.

Documentación: https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters

Puedes mirar el pgjdbc  Github número 451 para más detalles e historia del problema.

Tenga en cuenta que, según los problemas de rendimiento informados en el enlace anterior, debe realizar algunas pruebas de rendimiento / carga / remojo de su aplicación antes de encender esto a ciegas.


3
2018-01-31 07:05