DBAtlas · Atlas für Datenbankbetrieb

2F003: prohibited_sql_statement_attempted

PostgreSQL

Was bedeutet das?

In einer SQL-Funktion/-Routine wurde eine Anweisung versucht, die in diesem Kontext verboten ist. Gehört zu Klasse 2F (sql_routine_exception). Zum Beispiel versucht eine Funktion, die nur lesen soll, Daten zu ändern.

Ursache

Der PostgreSQL-Kern löst diesen Code selten aus; er stammt meist aus Code von Extensions oder prozeduralen Sprachen. Hinweis: Eine als IMMUTABLE/STABLE markierte Funktion, die INSERT/UPDATE/DELETE ausführt, löst nicht 2F003 aus, sondern '... is not allowed in a non-volatile function' mit Code 0A000 (feature_not_supported).

Lösung

Lies in der Fehlermeldung, welche Anweisung verboten war, und prüfe die Dokumentation der betroffenen Routine/Extension. Bekommst du den Fehler zur nicht-volatilen Funktion (0A000), definiere die datenändernde Funktion als VOLATILE (das ist der Standard): CREATE FUNCTION ... LANGUAGE plpgsql VOLATILE. Entferne datenändernde Aufrufe aus Stellen, die nur lesen dürfen (Indexausdrücke, Constraint-Prüfungen).

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank