AUTOCOMMIT OFF und IMPORT über pgadmin

Alle Fragen, Probleme, etc. zu PGAdmin kommen hier rein.
Antworten
REisele
Neuer Benutzer
Beiträge: 6
Registriert: Do 25. Jul 2019, 11:43

AUTOCOMMIT OFF und IMPORT über pgadmin

Beitrag von REisele »

Pgadmin 4.1
postgresql 10.10

Wenn ich AUTOCOMMIT = off gesetzt habe, und über die IMPORT-Funktion in pgadmin eine csv-Datei importieren will, dann wurden die Daten nicht gespeichert, obwohl pgadmin mir anzeigt, daß n-Sätze gespeichert wurden; die csv-Datei enthält n Sätze. Es erscheint auch keine Fehlermeldung, sondern eine Erfolgsmeldung.

Setze ich AUTOCOMMIT = on , dann funktionert das IMPORTieren.
Gibt es eine Möglichkeit bei AUTOCOMMIT = off dem IMPORT zu sagen, daß er nach dem erfolgreichen Laden dieser Sätze ein COMMIT durchführen soll ?

Ich möchte nicht jedesmal, wenn ich mittels IMPORT Sätze in eine odere mehrere Tabellen laden will, die Datei .psqlrc ändern und mich danach ausloggen und wieder einloggen.

Danke für hilfreiche Hinweis !

Rüdiger

akretschmer
Erfahrener Benutzer
Beiträge: 7715
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: AUTOCOMMIT OFF und IMPORT über pgadmin

Beitrag von akretschmer »

machst Du das via psql, und hast in der .psqlrc AUTOCOMMIT ausgeschaltet? Dann kannst Du psql mit -X aufrufen, dann wird die .psqlrc ignoriert.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

REisele
Neuer Benutzer
Beiträge: 6
Registriert: Do 25. Jul 2019, 11:43

Re: AUTOCOMMIT OFF und IMPORT über pgadmin

Beitrag von REisele »

Nein, ich führe den IMPORT nicht über psql durch, über psql funktioniert es, da bin ich auf Kommandoebene und kann dann explizit ein COMMIT absetzen.
Wenn ich über .psqlrc AUTOCOMMIT ausschalte (=OFF), dann sind die Daten nicht in der Tabelle, schalte ich über .psqlrc den AUTOCOMMIT an, dann sind die Daten nach dem IMPORT in der Tabelle.
Ich will den IMPORT über die IMPORT-Funktion von pgadmin durchführen, obwohl AUTOCOMMIT = OFF ist.

In pgadmin: Datenbank_name -> schema_name -> tabellen -> tabellen_name -> rechte Maustaste --> IMPORT/EXPORT

Ich denke, es fehlt ein Schalter oder Befehl bei der pgadmin IMPORT/EXPORT-Funktion, über den man explizit, nach erfolgreichem Laden (transakton) ein COMMIT absetzen kann, oder übersehe ich da etwas ?

Danke !
Rüdiger

Gisman
Erfahrener Benutzer
Beiträge: 1149
Registriert: Fr 20. Jan 2006, 15:30
Wohnort: Pfalz
Kontaktdaten:

Re: AUTOCOMMIT OFF und IMPORT über pgadmin

Beitrag von Gisman »

Der Commit-Button im Hauptfenster macht nichts?

Gruß Uwe

REisele
Neuer Benutzer
Beiträge: 6
Registriert: Do 25. Jul 2019, 11:43

Re: AUTOCOMMIT OFF und IMPORT über pgadmin

Beitrag von REisele »

Der Commit-Button hilft auch nicht.

Ich denke, daß ich einen Denkfehler gemacht habe.
Das IMPORT über pgadmin erzeugt ein psql-Kommando, das so aussieht;
psql --host=localhost --port=5432 --db=<db_name> --user=<username> -c "\copy <schema_name.table_name> from '<directory_name><datei_name.csv>' CSV ENCODING 'LATIN1' QUOTE '\"' ESCAPE '''';"" "
Dieses Kommando wird in einem eigenen Prozeß ausgeführt, der nach der Auführug des Kommandos wieder stribt und da die Datenbank auf AUTOCOMMIT=off steht, wird nach dem Tod des Prozesses ein Rollback durchgeführt.
Wenn ich das Kommando um ein COMMIT erweitere, dann ist alles wie gewünscht.
psql --host=localhost --port=5432 --db=<db_name> --user=<username> -c "\copy <schema_name.table_name> from '<directory_name.datei_name.csv>' CSV ENCODING 'LATIN1' QUOTE '\"' ESCAPE '''';""commit ; "
Da das Kommando durch den IMPORT-Befehl erzeugt und sofort ausgeführt wird, kann man das Kommado von Hand nicht erweiterm, es müßte im IMPORT-Menue ein Button zur Verfügung gestellt werden, über den man das Commit am Ende der TRX haben möchte oder nicht.

Mein Denkfehler bestand nun darin, daß davon ausgegangen wird, daß die Datenbank immer auf AUTOCOMMIT = ON konfiguriert ist und wenn man das AUTOCOMMIT ausschalten will muß man es eben auf SQL-Session-Ebene ausschalten.

Ich denke, mein Problem, ist damit gelöst.
Vielen Dank !
Grüße,
Rüdiger

Antworten