Chyby nemůžete přeskočit, aniž byste přeskočili celý příkaz až po Postgres 14 včetně. V současnosti neexistuje žádné sofistikovanější řešení chyb.
\copy
je jen obal kolem SQL COPY
že výsledky kanálů přes psql. Manuál pro COPY
:
COPY
zastaví operaci při první chybě. To by nemělo vést k problémům v případěCOPY TO
, ale cílová tabulka již obdržela dřívější řádky vCOPY FROM
. Tyto řádky nebudou viditelné ani přístupné, ale stále zabírají místo na disku. To by mohlo představovat značné množství plýtvaného místa na disku, pokud by k selhání došlo i během rozsáhlé operace kopírování. Možná budete chtít vyvolatVACUUM
obnovit ztracený prostor.
Odvážný důraz můj. A:
COPY FROM
vyvolá chybu, pokud kterýkoli řádek vstupního souboru obsahuje více nebo méně sloupců, než se očekává.
COPY
je extrémně rychlý způsob importu/exportu dat. Důmyslné kontroly a zpracování chyb by jej zpomalily.
Došlo k pokusu přidat protokolování chyb do COPY
v Postgres 9.0, ale nikdy nebyl potvrzen.
Řešení
Opravte místo toho svůj vstupní soubor.
Pokud máte ve vstupním souboru jeden nebo více dalších sloupců a soubor je jinak konzistentní , můžete do tabulky isa
přidat fiktivní sloupce a poté je vypusťte. Nebo (čistič s produkčními tabulkami) importujte do dočasné pracovní tabulky a INSERT
vybrané sloupce (nebo výrazy) do cílové tabulky isa
odtud.
Související odpovědi s podrobnými pokyny:
- Jak aktualizovat vybrané řádky hodnotami ze souboru CSV v Postgresu?
- Příkaz COPY:zkopírujte pouze určité sloupce z csv