Erreur à l'exécution en PL/pgSQL

La norme SQL évolue : tirez le meilleur d'un SGBD qui la respecte en écrivant du SQL moderne avec en complément PL/pgSQL, php, java etc.
Répondre
Phil
Administrateur du site
Messages : 299
Enregistré le : mar. 1 sept. 2015 00:38
Localisation : France
Contact :

Erreur à l'exécution en PL/pgSQL

Message par Phil »

Merci à Guillaume pour sa question :

"Bonjour, j'obtiens l'erreur suivante à l'exécution d'un code PL/pgSQL :
le type de paramètre 10 (numeric) ne correspond pas à celui préparé dans le plan (timestamp without time zone)

Complément d'information :
- la requête porte sur une table temporaire dont le nom est réutilisé avec d'autres colonnes/types
"


Réponse :

PL/pgSQL demande implicitement la génération de plans génériques afin qu'ils soient mis en cache. PostgreSQL, comme Oracle d'ailleurs, recommandent d'avoir 1 parse pour N exécutions afin de gagner en performance et les 2 moteurs réalisent cette optimisation sous le manteau dans leur langage procédural intégré. Ici, toutefois, c'est KO puisque le plan en cache n'est plus adapté lors de l'exécution en erreur. Il faut utiliser des nom différents pour ces tables temporaires ou modifier la valeur du paramètre plan_cache_mode à force_custom_plan dans le contexte de ce programme ou encore utiliser "discard plans" avant la requête.
Cdlt. Phil - pgphil.ovh
Répondre