25001: active_sql_transaction
PostgreSQLWas bedeutet das?
Ein Befehl, der nur außerhalb einer Transaktion oder an deren Beginn laufen darf, wurde bei aktiver Transaktion aufgerufen. Manche Befehle laufen nicht innerhalb eines Transaktionsblocks.
Ursache
Einstellungen wie SET TRANSACTION ISOLATION LEVEL müssen vor der ersten Abfrage im Block abgesetzt werden ('SET TRANSACTION ISOLATION LEVEL must be called before any query'). Ebenso werden manche Befehle innerhalb eines offenen BEGIN/einer offenen Transaktion abgelehnt. Meist rührt das daher, dass die Anwendung Autocommit deaktiviert und unbemerkt eine Transaktion startet.
Lösung
Setze Einstellungen auf Transaktionsebene ganz am Anfang der Transaktion ab, bevor eine Abfrage läuft: BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ... Prüfe, ob die Client-Bibliothek eine implizite Transaktion öffnet (Autocommit-Einstellung). Schließe für Befehle, die nicht in einem Transaktionsblock laufen können, zuerst die aktuelle Transaktion mit COMMIT/ROLLBACK ab.