Ich versuche, meine Dump-Datei wiederherzustellen, aber es ist ein Fehler aufgetreten:
psql:psit.sql:27485: invalid command \N
Gibt es eine Lösung? Ich habe gesucht, aber keine klare Antwort erhalten.
Ich versuche, meine Dump-Datei wiederherzustellen, aber es ist ein Fehler aufgetreten:
psql:psit.sql:27485: invalid command \N
Gibt es eine Lösung? Ich habe gesucht, aber keine klare Antwort erhalten.
Antworten:
Postgres verwendet "\ N" als Ersatzsymbol für den NULL-Wert. Alle psql-Befehle beginnen jedoch mit dem Backslash-Symbol "\". Sie können diese Meldungen also erhalten, wenn die Kopieranweisung wahrscheinlich fehlschlägt, das Laden des Speicherauszugs jedoch fortgesetzt wird. Diese Meldung ist nur ein Fehlalarm. Sie müssen vorher eine Zeile nach dem Grund durchsuchen, warum die COPY-Anweisung fehlschlägt.
Ist es möglich, psql in den Modus "Stop on first error" zu schalten und Fehler zu finden:
psql -v ON_ERROR_STOP=1
create table...
der Start fehlschlägt, das Laden jedoch fortgesetzt wird.
(pg_restore ... | psql ...) 2>&1 | less
Ich versuche die gleiche Fehlermeldung, wenn ich versuche, von einem binären Speicherauszug wiederherzustellen. Ich habe einfach pg_restore
meinen Dump wiederhergestellt und die \N
Fehler vollständig vermieden, z
pg_restore -c -F t -f your.backup.tar
Erklärung der Schalter:
-f, --file=FILENAME output file name
-F, --format=c|d|t backup file format (should be automatic)
-c, --clean clean (drop) database objects before recreating
Ich bin auch in der Vergangenheit auf diesen Fehler gestoßen. Pavel ist korrekt, es ist normalerweise ein Zeichen dafür, dass etwas in dem von pg_restore erstellten Skript fehlschlägt. Aufgrund all der "/ N" -Fehler sehen Sie das eigentliche Problem nicht ganz oben in der Ausgabe. Ich schlage vor:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
eine Reihe von Datensätzen öffnen und löschen).In meinem Fall war die Erweiterung "hstore" noch nicht installiert, sodass das Skript ganz oben fehlschlug. Ich habe hstore in der Zieldatenbank installiert und war wieder im Geschäft.
Sie können Ihren Speicherauszug mithilfe von INSERTS-Anweisungen mit dem Parameter --inserts generieren.
Das gleiche ist mir heute passiert. Ich habe das Problem durch Dumping mit dem Befehl --inserts behoben.
Was ich tue ist:
1) pg_dump mit Einfügungen:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (stelle deine gedumpte Datei wieder her)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Hinweis 1) Stellen Sie sicher, dass das Hinzufügen einer Ausgabedatei die Importgeschwindigkeit erhöht.
Hinweis-2) Vergessen Sie nicht, vor dem Import mit psql eine Tabelle mit genau demselben Namen und denselben Spalten zu erstellen.
Nach meiner jüngsten Erfahrung ist es möglich, diesen Fehler zu erhalten, wenn das eigentliche Problem nichts mit Escapezeichen oder Zeilenumbrüchen zu tun hat. In meinem Fall hatte ich einen Dump aus Datenbank A mit erstellt
pg_dump -a -t table_name > dump.sql
und versuchte, ihn in Datenbank B mit wiederherzustellen
psql < dump.sql
(natürlich nach dem Aktualisieren der richtigen env-Variablen).
Schließlich stellte ich fest, dass es sich um den Dump handelte (obwohl dies data-only
der -a
Fall war) war schemaspezifisch, damit die Tabellenstruktur nicht explizit Teil des Speicherauszugs ist. Das bedeutete, dass ich ohne manuelles Ändern des Dumps keinen Dump verwenden konnte, der schema1.table_name
zum Auffüllen generiert wurde schema2.table_name
. Das manuelle Ändern des Speicherauszugs war einfach. Das Schema wird in den ersten 15 Zeilen oder so angegeben.
Bei Verwendung von postgreSQL 10 unter SUSE 12 habe ich den invalid command \N
Fehler durch Erhöhen des Speicherplatzes behoben . Der Mangel an Speicherplatz verursachte den Fehler für mich. Sie können feststellen, ob Sie nicht genügend Speicherplatz haben, wenn Sie sich das Dateisystem ansehen, in das Ihre Daten in der df -h
Ausgabe verschoben werden. Wenn das Dateisystem / Mount zu 100% verwendet wird, müssen Sie wahrscheinlich den verfügbaren Speicherplatz erhöhen , nachdem Sie Folgendes getan haben psql -f db.out postgres
(siehe https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) .
Ich hatte das gleiche Problem, ich habe eine neue Datenbank erstellt und invalid command \N
mit psql wiederhergestellt. Ich habe es gelöst, indem ich den gleichen Tabellenbereich mit der alten Datenbank festgelegt habe.
Zum Beispiel hatte die alte Datenbanksicherung den Tabellenbereich "pg_default", ich habe den gleichen Tabellenbereich für die neue Datenbank definiert und der obige Fehler ist verschwunden!