sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan ignoreres fejl med psql \copy meta-kommando

Du kan ikke springe fejlene over uden at springe hele kommandoen over til og med Postgres 14. Der er i øjeblikket ingen mere sofistikeret fejlhåndtering.

\copy er blot en indpakning omkring SQL COPY der kanaliserer resultater gennem psql. Manualen til COPY :

COPY stopper driften ved den første fejl. Dette bør ikke føre til problemer i tilfælde af en COPY TO , men måltabellen vil allerede have modtaget tidligere rækker i en COPY FROM . Disse rækker vil ikke være synlige eller tilgængelige, men de optager stadig diskplads. Dette kan udgøre en betragtelig mængde spildt diskplads, hvis fejlen opstod langt inde i en stor kopioperation. Du ønsker måske at påkalde VACUUM for at genvinde den spildte plads.

Fed understregning min. Og:

COPY FROM vil rejse en fejl, hvis en linje i inputfilen indeholder flere eller færre kolonner end forventet.

COPY er en ekstrem hurtig måde at importere/eksportere data på. Sofistikerede kontroller og fejlhåndtering ville bremse det.

Der var et forsøg på at tilføje fejllogning til COPY i Postgres 9.0, men det blev aldrig forpligtet.

Løsning

Ret din inputfil i stedet for.

Hvis du har en eller flere ekstra kolonner i din inputfil, og filen er ellers konsekvent , kan du tilføje dummy-kolonner til din tabel isa og slip dem bagefter. Eller (renere med produktionstabeller) importer til en midlertidig staging-tabel og INSERT valgte kolonner (eller udtryk) til din måltabel isa derfra.

Relaterede svar med detaljerede instruktioner:

  • Hvordan opdaterer du valgte rækker med værdier fra en CSV-fil i Postgres?
  • COPY kommando:kopier kun specifikke kolonner fra csv


  1. Fatal fejl:Kald til udefineret funktion mysql_connect()

  2. Hvordan formindsker jeg min SQL Server-database?

  3. Tidsstempel med en millisekunds præcision:Sådan gemmer du dem i MySQL

  4. Sådan viser du sorteringen af ​​en kolonne i MySQL