2016-07-29 8 views
1

Ich versuche, Daten aus einer SQL-Datei, die etwa 1,6 GB groß ist, einzufügen. Ich habe den Befehl:Postgres sql-Datei einfügen hängen

\i filename.sql 

jedoch hatte es für gut über zehn Minuten gelaufen. Am Anfang, als ich es lief habe ich Ausgang wie unten:

psql:xxx.sql:1102: ERROR: role "xxx" does not exist 
psql:xxx.sql:1124: ERROR: relation "xxx" already exists 
psql:xxx.sql:1127: ERROR: role "xxx" does not exist 
psql:xxx.sql:1138: ERROR: relation "xxx" already exists 
psql:xxx.sql:1141: ERROR: role "xxx" does not exist 
psql:xxx.sql:1177: ERROR: relation "xxx" already exists 
psql:xxx.sql:1180: ERROR: role "xxx" does not exist 
psql:xxx.sql:1191: ERROR: relation "xxx" already exists 
psql:xxx.sql:1194: ERROR: role "xxx" does not exist 
psql:xxx.sql:1223: ERROR: relation "xxx" already exists 
psql:xxx.sql:1226: ERROR: role "xxx" does not exist 
psql:xxx.sql:1237: ERROR: relation "xxx" already exists 
psql:xxx.sql:1240: ERROR: role "xxx" does not exist 

Dies setzt sich fort, bis die letzte Ausgabe war:

psql:xxx.sql:1183266: ERROR: duplicate key value violates unique constraint "xxx" 
DETAIL: Key (id)=(2) already exists. 
CONTEXT: COPY mo_logs, line 1: "2 +6421558671  +15759151518 LolWithPlus  unable to deliver, dropping : undefined method `bytesize' for..." 

Dann wird die Konsole zeigt nichts Neues, da dann. Bei meinem ersten Versuch, dachte ich, es war so aufgeregt hängt aber bekam die folgende Ausgabe:

Cancel request sent 

Dies führt mich das Skript zu glauben, noch läuft, aber ich habe keine Möglichkeit zu sagen. Kann jemand raten, wie ich entweder diagnostizieren kann, was vor sich geht, oder mir einen Hinweis geben kann, ob der Einsatz versagt, wie gezeigt, indem er hängt?

Antwort

1

Es scheint, als ob das SQL-Skript mehrere COPY-Anweisungen enthält.
Einer von ihnen (COPY TO mo_logs) ist fehlgeschlagen, und ein anderer von ihnen (COPY TO midn_protections) wurde ausgeführt, als Sie die Verarbeitung unterbrochen haben.

Normalerweise funktioniert psql nach einem Fehler weiter und wird nur die nächste Anweisung ausführen. Um dies zu vermeiden, starten Sie es mit der Option --set ON_ERROR_STOP=on.

+0

Danke für den Rat. Ich dachte, dass es noch läuft, aber es wäre schön, etwas anderes als Fehler zu sehen, um zu zeigen, dass Fortschritte gemacht wurden. Ist das möglich? Ich habe versucht, einen Befehl zu finden, aber kein anderes Glück als die einfache Protokollierung in eine Datei meiner Wahl. – EamonnMcElroy

+0

Sie können die Option '-a' von' psql' verwenden, um die aktuelle Anweisung zu übernehmen. –

+0

Also wäre das '\ i filename.sql -a' – EamonnMcElroy