Ja, dies ist ein bekanntes Problem.
PL/pgSQL (wie jede andere Funktion, außer auf SQL
) ist eine „Blackbox“ für PostgreSQL, daher ist es nicht wirklich möglich, Fehler außer zur Laufzeit zu erkennen.
Sie können mehrere Dinge tun:
- verpacken Sie Ihre Funktion, die
SQL
aufruft Abfragen inBEGIN
/COMMIT
Anweisungen, um Fehler besser kontrollieren zu können; - fügen Sie
EXCEPTION
Blöcke zu Ihrem Code, um Fehler abzufangen und zu verfolgen. Beachten Sie jedoch, dass dies die Leistung der Funktion beeinträchtigt; - Verwenden Sie
plpgsql_check
Erweiterung , entwickelt von Pavel Stěhule, der einer der Hauptverantwortlichen für die Entwicklung von PL/pgSQL ist. Ich nehme an, diese Erweiterung wird es irgendwann in den Kern von PostgreSQL schaffen, aber es wird einige Zeit dauern (jetzt sind wir im 9.4beta3-Status); - Sie können sich auch diese verwandte Frage ansehen:Postgresql-Syntaxprüfung ohne Ausführen der Abfrage
Und es sieht wirklich so aus, als ob Sie dringend ein Unit-Testing-Framework benötigen.