Nie można pominąć błędów bez pominięcia całego polecenia aż do Postgres 14. włącznie. Obecnie nie ma bardziej zaawansowanej obsługi błędów.
\copy
jest tylko opakowaniem wokół SQL COPY
że kanały wyniki przez psql. Podręcznik dla COPY
:
COPY
zatrzymuje działanie przy pierwszym błędzie. Nie powinno to prowadzić do problemów w przypadku COPY TO
, ale docelowa tabela już otrzymała wcześniejsze wiersze w COPY FROM
. Te wiersze nie będą widoczne ani dostępne, ale nadal zajmują miejsce na dysku. Może to oznaczać znaczną ilość zmarnowanego miejsca na dysku, jeśli awaria przeszła na dużą operację kopiowania. Możesz chcieć wywołać VACUUM
by odzyskać zmarnowaną przestrzeń.
Moje odważne podkreślenie. Oraz:
COPY FROM
zgłosi błąd, jeśli jakakolwiek linia pliku wejściowego zawiera więcej lub mniej kolumn niż oczekiwano.
COPY
to niezwykle szybki sposób na import/eksport danych. Skomplikowane kontrole i obsługa błędów spowolniłyby ten proces.
Próbowano dodać logowanie błędów do COPY
w Postgres 9.0, ale nigdy nie został popełniony.
Rozwiązanie
Zamiast tego napraw plik wejściowy.
Jeśli masz co najmniej jedną dodatkową kolumnę w pliku wejściowym, a plik jest w przeciwnym razie spójny , możesz dodać fikcyjne kolumny do swojej tabeli isa
i upuść je później. Lub (czystsze z tabelami produkcyjnymi) zaimportuj do tymczasowej tabeli pomostowej i INSERT
wybrane kolumny (lub wyrażenia) do tabeli docelowej isa
stamtąd.
Powiązane odpowiedzi ze szczegółowymi instrukcjami:
- Jak zaktualizować wybrane wiersze wartościami z pliku CSV w Postgresie?
- Kopiuj polecenie:skopiuj tylko określone kolumny z csv