2010-05-06 13 views

Respuesta

123

Descubrí qué causaba el error.

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

Mientras tanto, otra secuencia de comandos 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 se haya modificado la tabla de la base de datos. Esto restablece la conexión de la base de datos, permitiendo que la declaración preparada se ejecute sin errores.

+3

Obtuve esto en PostgreSQL 9.0.4, con Ruby on Rails 3.1-pre5. Parece que esto debería ser manejado automáticamente por ActiveRecord, ¿no? –

+3

Sí, espero que ActiveRecord eventualmente se encargue de esto. Creo que llamar a MyModel.reset_column_information arreglará las cosas a corto plazo si desea evitar el reinicio. – nertzy

+0

Todavía no hay cambio para mí ... – alanjds

1

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

Puede evitar este problema configurando su controlador pgjdbc 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

Usted puede mirar en el pgjdbcGithub issue 451 para más detalles y la historia de la cuestión.

Cuestiones relacionadas