Hallo!
Ich habe ein Programm geschrieben, dass die Wiederherstellung der Daten für unsere Anwendung durchführen soll. Zuerst wird die alte DB gelöscht, dann wird eine neue angelegt und die wiederherstellung mit pg_restore angestoßen. Um das ganze durchführen zu können, baue ich eine Verbindung zur "postgres"-DB und führe dann die befehle aus.
Bis jetzt hat das Programm mit Postgres 8.2.x richtig funktioniert. Jetzt versuche ich dieses mit der Version 9.1.1 und habe Probleme: die Befehle "Drop database" und "Create Database" funktionieren nicht mehr. Es kommt eine Meldung, dass diese Befehle nicht in einer Transaktion ausgeführt werden können, wobei ich ja eigentlich keine Transaktion mache.
Was könnte das sein und wie kann ich das Problem lösen?
Gruß
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Nein, ich baue eine ODBC-Verbindung auf, in der allerdings extra Autocommit auf ON gesetzt wird. Ich habe aber schon beide Einstellungen für Autocommit ausprobiert, was leider nichts gebracht hat.
Gruß
Andreas
Was passiert, wenn du die Autocommit Einstellung änderst?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Wenn ich die Autocommit-Einstellung ändere, passiert nicht. Ich bekomme den gleichen Fehler!
Gruß
Andreas
Kannst du mal das Query Logging anschalten?
log_min_duration_query=0
Und protokollieren, was alles ausgeführt wird?
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Hier ist der Ausschnitt aus dem Protokoll:
Ich habe mir auch noch die Autocommit-Einstellung von dem Programm nach Verbindungsaufbau ausgeben lassen: es ist 0.2011-10-25 10:11:29 CEST FEHLER: DROP DATABASE kann nicht in einem Transaktionsblock laufen
2011-10-25 10:11:29 CEST ANWEISUNG: BEGIN;DROP DATABASE IF EXISTS test;
2011-10-25 10:11:29 CEST LOG: Dauer: 0.000 ms Anweisung: ROLLBACK
Von dem Programm wird definitiv nur "DROP DATABASE IF EXISTS test" übergeben.
Gruß
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas,
ich habe gesehen, dass dazwischen ein "BEGIN" steht, was mich ja auch wundert.
Ich habe jetzt zum Testen einiges ausprobiert:
1. ich habe die Transaction-Einstellungen auf dem Server auf "read uncommitted" gesetzt.
2. ich habe festgestellt, dass der Befehl "SET AUTOCOMMIT TO OFF" von dem Server nicht mehr unterstützt wird!
3. Hier ist noch ein Ausschnitt aus dem Protokoll:FEHLER: SET AUTOCOMMIT TO OFF wird nicht mehr unterstützt
********** Fehler **********
FEHLER: SET AUTOCOMMIT TO OFF wird nicht mehr unterstützt
SQL Status:0A000
und mit einem Commit nach "SET"2011-10-25 10:50:57 CEST LOG: Dauer: 0.000 ms Anweisung: BEGIN;set TRANSACTION_ISOLATION to 'read uncommitted'
2011-10-25 10:50:57 CEST LOG: Dauer: 0.000 ms Anweisung: SAVEPOINT _EXEC_SVP_03DC9030
2011-10-25 10:50:57 CEST FEHLER: DROP DATABASE kann nicht in einem Transaktionsblock laufen
2011-10-25 10:50:57 CEST ANWEISUNG: DROP DATABASE IF EXISTS test;
2011-10-25 10:50:57 CEST LOG: Dauer: 0.000 ms Anweisung: ROLLBACK to _EXEC_SVP_03DC9030
2011-10-25 10:50:57 CEST LOG: Dauer: 0.000 ms Anweisung: RELEASE _EXEC_SVP_03DC9030
2011-10-25 10:58:48 CEST LOG: Dauer: 0.000 ms Anweisung: BEGIN;set TRANSACTION_ISOLATION to 'read uncommitted'
2011-10-25 10:58:48 CEST LOG: Dauer: 0.000 ms Anweisung: COMMIT
2011-10-25 10:58:48 CEST FEHLER: DROP DATABASE kann nicht in einem Transaktionsblock laufen
2011-10-25 10:58:48 CEST ANWEISUNG: BEGIN;DROP DATABASE IF EXISTS m1;
2011-10-25 10:58:48 CEST LOG: Dauer: 0.000 ms Anweisung: ROLLBACKWie kann ich es überhaupt machen?Zitat von akretschmer
Gruß
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen