it-swarm.com.de

psql ungültiger Befehl\N beim Wiederherstellen von SQL

Ich versuche, meine Sicherungsdatei wiederherzustellen, aber es wurde ein Fehler verursacht

psql:psit.sql:27485: invalid command \N

Gibt es eine Lösung? Ich suchte, bekam aber keine klare Antwort.

100
Vivek Vikranth

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 von dump jedoch fortgesetzt wird. Diese Meldung ist nur Fehlalarm. Sie müssen zuvor eine Zeile nach dem Grund suchen, warum die COPY-Anweisung fehlschlägt.

Ist es möglich, psql in den Modus "Stop on first error" zu schalten und nach Fehlern zu suchen:

psql -v ON_ERROR_STOP=1
150
Pavel Stehule

Beim Versuch, aus einem binären Speicherauszug wiederherzustellen, wird dieselbe Fehlermeldung angezeigt. Ich habe einfach pg_restore verwendet, um meinen Speicherauszug wiederherzustellen und die \N-Fehler vollständig zu vermeiden, 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

28
nottinhill

Ich weiß, dass dies ein alter Beitrag ist, aber ich bin auf eine andere Lösung gestoßen: Postgis wurde nicht in meiner neuen Version installiert, was zu demselben Fehler auf pg_dump führte

6
So4ne

Ich bin auch in der Vergangenheit auf diesen Fehler gestoßen. Pavel ist korrekt, normalerweise ist dies ein Zeichen dafür, dass etwas in dem von pg_restore erstellten Skript fehlschlägt. Aufgrund aller "/ N" -Fehler sehen Sie das eigentliche Problem nicht ganz oben in der Ausgabe. Ich schlage vor:

  1. einfügen einer einzelnen, kleinen Tabelle (z. B. pg_restore --table=orders full_database.dump > orders.dump
  2. wenn Sie keine kleine haben, löschen Sie eine Reihe von Datensätzen aus dem Wiederherstellungsskript. Ich habe lediglich sichergestellt, dass ./ die letzte Zeile ist, die geladen werden soll (z. B. orders.dump öffnen und eine Reihe von Datensätzen löschen)
  3. sehen Sie sich die Standardausgabe an. Wenn Sie das Problem gefunden haben, können Sie die Tabelle jederzeit löschen und erneut laden

In meinem Fall hatte ich noch nicht die "hstore" -Erweiterung installiert, sodass das Skript ganz oben fehlschlug. Ich habe hstore in der Zieldatenbank installiert und war wieder im Geschäft.

5
oraserrata

Sie können Ihren Speicherauszug mithilfe von INSERTS-Anweisungen mit dem Parameter --inserts generieren.

3

Installieren Sie postgresql- (Ihre Version) -postgis-Skripte

3
Geets

Dasselbe ist mir heute passiert. Ich habe das Problem durch das Ablegen des Befehls --inserts behandelt. 

Was ich mache ist: 

1) pg_dump mit Einlagen:

pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql

2) psql (stellen Sie Ihre Dump-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 der Ausgabedatei die Importgeschwindigkeit erhöht.

Hinweis-2) Vergessen Sie nicht, vor dem Import mit psql eine Tabelle mit exakt demselben Namen und Spalten zu erstellen. 

3
Ekrem Gurdal

In meiner jüngsten Erfahrung ist es möglich, diesen Fehler zu erhalten, wenn das eigentliche Problem nichts mit Fluchtzeichen 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, es mit der Datenbank B wiederherzustellen
psql < dump.sql (natürlich nach dem Update der richtigen Umgebung)
Was ich schließlich herausfand, war, dass der Speicherauszug, obwohl es data-only war (die Option -a, sodass die Tabellenstruktur nicht explizit Teil des Speicherauszugs ist) schemaspezifisch war. Das bedeutet, dass ich ohne manuelles Ändern des Dumps keinen mit schema1.table_name generierten Dump verwenden konnte, um schema2.table_name zu füllen. Das manuelle Ändern des Dumps war einfach, das Schema wird in den ersten 15 Zeilen angegeben.

1

Bei der Verwendung von postgreSQL 10 unter SUSE 12 habe ich den invalid command \N-Fehler durch Erhöhen des Festplattenspeicherplatzes behoben. Fehlender Festplattenspeicher verursachte den Fehler für mich. Wenn Sie sich das Dateisystem Ihrer Daten in der df -h-Ausgabe ansehen, können Sie feststellen, ob Sie keinen Speicherplatz mehr haben. Wenn das Dateisystem/mount zu 100% verwendet wird, müssen Sie wahrscheinlich etwas wie psql -f db.out postgres (siehe https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) tun Erhöhen Sie den verfügbaren Speicherplatz.

0
mountainclimber

In den meisten Fällen müssen Sie das postgres-contrib-Paket installieren.

0
Farsheed