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