Ja, detta är ett känt problem.
PL/pgSQL (som alla andra funktioner, förutom på SQL
) är en "svart låda" för PostgreSQL, därför är det inte riktigt möjligt att upptäcka fel förutom under körning.
Du kan göra flera saker:
- omslut din funktion som anropar
SQL
frågor tillBEGIN
/COMMIT
uttalanden för att få bättre kontroll över fel; - lägg till
EXCEPTION
block till din kod för att fånga och spåra fel. Observera dock att detta kommer att påverka funktionsprestanda; - använd
plpgsql_check
förlängning , utvecklad av Pavel Stěhule, som är en av de främsta bidragsgivarna till PL/pgSQL-utveckling. Jag antar att den här tillägget till slut kommer att hamna i kärnan av PostgreSQL, men det kommer att ta lite tid (nu är vi i 9.4beta3-tillstånd); - Du kan också titta på den här relaterade frågan:postgresql-syntaxkontroll utan att köra frågan
Och det ser verkligen ut som att du är i ett stort behov av ett ramverk för enhetstestning.