Du kan inte hoppa över felen utan att hoppa över hela kommandot till och med Postgres 14. Det finns för närvarande ingen mer sofistikerad felhantering.
\copy
är bara ett omslag runt SQL COPY
som kanaliserar resultat genom psql. Manualen för COPY
:
COPY
stoppar driften vid det första felet. Detta bör inte leda till problem i händelse av enCOPY TO
, men måltabellen har redan tagit emot tidigare rader i enCOPY FROM
. Dessa rader kommer inte att vara synliga eller tillgängliga, men de upptar fortfarande diskutrymme. Detta kan innebära en ansenlig mängd bortkastat diskutrymme om felet inträffade långt in i en stor kopieringsoperation. Du kanske vill anropaVACUUM
för att återvinna det bortkastade utrymmet.
Djärv betoning min. Och:
COPY FROM
kommer att visa ett fel om någon rad i indatafilen innehåller fler eller färre kolumner än vad som förväntas.
COPY
är ett extremt snabbt sätt att importera/exportera data. Sofistikerade kontroller och felhantering skulle sakta ner.
Det gjordes ett försök att lägga till felloggning till COPY
i Postgres 9.0 men det blev aldrig begått.
Lösning
Fixa din inmatningsfil istället.
Om du har en eller flera ytterligare kolumner i din indatafil och filen är i övrigt konsekvent , kan du lägga till dummy-kolumner i tabellen isa
och släpp dem efteråt. Eller (renare med produktionstabeller) importera till en temporär mellanställningstabell och INSERT
valda kolumner (eller uttryck) till din måltabell isa
därifrån.
Relaterade svar med detaljerade instruktioner:
- Hur uppdaterar man valda rader med värden från en CSV-fil i Postgres?
- COPY-kommandot:kopiera endast specifika kolumner från csv