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