Oui, c'est un problème connu.
PL/pgSQL (comme toute autre fonction, sauf sur SQL ) est une « boîte noire » pour PostgreSQL, il n'est donc pas vraiment possible de détecter des erreurs sauf lors de l'exécution.
Vous pouvez faire plusieurs choses :
- enveloppez votre fonction en appelant
SQLrequêtes dansBEGIN/COMMITdéclarations afin d'avoir un meilleur contrôle sur les erreurs ; - ajouter
EXCEPTIONblocs à votre code pour détecter et suivre les erreurs. Notez cependant que cela affectera les performances de la fonction ; - utiliser
plpgsql_checkextension , développé par Pavel Stěhule, qui est l'un des principaux contributeurs au développement PL/pgSQL. Je suppose que cette extension finira par entrer dans le cœur de PostgreSQL, mais cela prendra un certain temps (nous sommes maintenant dans l'état 9.4beta3) ; - Vous pouvez également vous pencher sur cette question connexe :vérification de la syntaxe postgresql sans exécuter la requête
Et il semble vraiment que vous ayez un énorme besoin d'un cadre de test unitaire.