Je rajoute cette réponse pour toute personne arrivant ici en googlant ERROR: cached plan must not change result type
en essayant de résoudre le problème dans le contexte d'une application Java / JDBC.
J'ai pu reproduire l'erreur de manière fiable en exécutant des mises à jour de schéma (c'est-à-dire des instructions DDL) alors que mon application back-end utilisant la base de données était en cours d'exécution. Si l'application interrogeait une table qui avait été modifiée par la mise à niveau du schéma (c'est-à-dire si l'application exécutait des requêtes avant et après la mise à niveau sur une table modifiée) - le pilote postgres retournerait cette erreur car il semble qu'il fait du caching de certains détails du schéma.
Vous pouvez éviter le problème en configurant votre pilote pgjdbc
avec autosave=conservative
. Avec cette option, le pilote pourra vider les détails qu'il met en cache et vous ne devriez pas avoir à redémarrer votre serveur ou à vider votre pool de connexions ou à tout autre contournement que vous auriez pu trouver.
Reproduit sur Postgres 9.6 (AWS RDS) et mes premiers tests semblent indiquer que le problème est complètement résolu avec cette option.
Documentation : https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters
Vous pouvez consulter le problème pgjdbc
Github issue 451 pour plus de détails et l'historique du problème.
Les utilisateurs de ActiveRecord JRuby voient cela : https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/connection_methods.rb#L60
Remarque sur les performances :
En ce qui concerne les problèmes de performances signalés dans le lien ci-dessus - vous devriez effectuer des tests de performances / de charge / de saturation de votre application avant d'activer cela aveuglément.
Après avoir effectué des tests de performance sur mon application tournant sur une instance Postgres 10
AWS RDS, activer le réglage conservative
entraîne une utilisation supplémentaire du CPU sur le serveur de base de données. Ce n'était pas grand chose cependant, je pouvais seulement voir la fonctionnalité autosave
consommer une quantité mesurable de CPU après avoir optimisé chaque requête de mon test de charge et commencé à pousser fort le test de charge.
0 votes
Pouvez-vous s'il vous plaît partager la version exacte de PostgreSQL? 8.3.X?