PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So ignorieren Sie Fehler mit dem Metabefehl psql \copy

Sie können die Fehler nicht überspringen, ohne den gesamten Befehl bis einschließlich Postgres 14 zu überspringen. Es gibt derzeit keine ausgefeiltere Fehlerbehandlung.

\copy ist nur ein Wrapper um SQL COPY die Ergebnisse durch psql kanalisiert. Das Handbuch für COPY :

COPY stoppt den Betrieb beim ersten Fehler. Dies sollte bei einem COPY TO nicht zu Problemen führen , aber die Zieltabelle hat bereits frühere Zeilen in einem COPY FROM erhalten . Diese Zeilen sind weder sichtbar noch zugänglich, belegen aber dennoch Speicherplatz. Dies kann zu einer beträchtlichen Menge an verschwendetem Plattenspeicherplatz führen, wenn der Fehler weit in einem großen Kopiervorgang auftritt. Vielleicht möchten Sie VACUUM aufrufen um den verschwendeten Speicherplatz zurückzugewinnen.

Fette Hervorhebung von mir. Und:

COPY FROM löst einen Fehler aus, wenn eine Zeile der Eingabedatei mehr oder weniger Spalten als erwartet enthält.

COPY ist eine extrem schnelle Möglichkeit, Daten zu importieren / exportieren. Ausgefeilte Überprüfungen und Fehlerbehandlung würden es verlangsamen.

Es wurde versucht, Fehlerprotokollierung zu COPY hinzuzufügen in Postgres 9.0, aber es wurde nie festgeschrieben.

Lösung

Korrigieren Sie stattdessen Ihre Eingabedatei.

Wenn Sie eine oder mehrere zusätzliche Spalten in Ihrer Eingabedatei haben und die Datei ansonsten konsistent ist , könnten Sie Ihrer Tabelle isa Dummy-Spalten hinzufügen und lassen Sie diese danach fallen. Oder (sauberer mit Produktionstabellen) in eine temporäre Staging-Tabelle importieren und INSERT ausgewählte Spalten (oder Ausdrücke) in Ihre Zieltabelle isa von dort.

Verwandte Antworten mit ausführlicher Anleitung:

  • Wie aktualisiere ich ausgewählte Zeilen mit Werten aus einer CSV-Datei in Postgres?
  • COPY-Befehl:Nur bestimmte Spalten aus CSV kopieren