Не можете да пропуснете грешките, без да пропуснете цялата команда до и включително Postgres 14. Понастоящем няма по-сложна обработка на грешки.
\copy
е просто обвивка около SQL COPY
който канализира резултатите чрез psql. Ръководството за COPY
:
COPY
спира работата при първа грешка. Това не трябва да води до проблеми в случай наCOPY TO
, но целевата таблица вече ще е получила по-ранни редове вCOPY FROM
. Тези редове няма да бъдат видими или достъпни, но все пак заемат дисково пространство. Това може да доведе до значително количество загубено дисково пространство, ако неуспехът се е случил при голяма операция за копиране. Може да искате да извикатеVACUUM
за да възстановите пропиляното пространство.
Удебелен акцент мой. И:
COPY FROM
ще изведе грешка, ако някой ред от входния файл съдържа повече или по-малко колони от очакваното.
COPY
е изключително бърз начин за импортиране/експортиране на данни. Сложните проверки и обработката на грешки биха го забавили.
Имаше опит за добавяне на регистриране на грешки към COPY
в Postgres 9.0, но никога не е бил ангажиран.
Решение
Вместо това поправете своя входен файл.
Ако имате една или повече допълнителни колони във вашия входен файл и файлът е по друг начин последователен , можете да добавите фиктивни колони към вашата таблица isa
и ги пуснете след това. Или (инструмент за почистване с производствени таблици) импортирайте във временна стадия и INSERT
избрани колони (или изрази) към вашата целева таблица isa
от там.
Свързани отговори с подробни инструкции:
- Как да актуализирам избрани редове със стойности от CSV файл в Postgres?
- Команда COPY:копирайте само определени колони от csv