U kunt de fouten niet overslaan zonder de hele opdracht tot en met Postgres 14 over te slaan. Er is momenteel geen geavanceerdere foutafhandeling.
\copy
is slechts een wrapper rond SQL COPY
die resultaten kanaliseert via psql. De handleiding voor COPY
:
COPY
stopt de werking bij de eerste fout. Dit zou niet tot problemen mogen leiden in het geval van eenCOPY TO
, maar de doeltabel heeft al eerdere rijen ontvangen in eenCOPY FROM
. Deze rijen zijn niet zichtbaar of toegankelijk, maar ze nemen nog steeds schijfruimte in beslag. Dit zou een aanzienlijke hoeveelheid verspilde schijfruimte kunnen betekenen als de fout zich zou voordoen in een grote kopieerbewerking. Misschien wilt u een beroep doen opVACUUM
om de verspilde ruimte terug te winnen.
Vetgedrukte nadruk van mij. En:
COPY FROM
zal een foutmelding geven als een regel van het invoerbestand meer of minder kolommen bevat dan verwacht.
COPY
is een extreem snelle manier om gegevens te importeren / exporteren. Geavanceerde controles en foutafhandeling zouden het vertragen.
Er is een poging gedaan om foutregistratie toe te voegen aan COPY
in Postgres 9.0, maar het is nooit vastgelegd.
Oplossing
Corrigeer in plaats daarvan uw invoerbestand.
Als u een of meer extra kolommen in uw invoerbestand heeft en het bestand is anders consistent , kunt u dummy-kolommen toevoegen aan uw tabel isa
en laat die daarna vallen. Of (opschonen met productietabellen) importeren in een tijdelijke staging-tabel en INSERT
geselecteerde kolommen (of uitdrukkingen) naar uw doeltabel isa
vanaf daar.
Gerelateerde antwoorden met gedetailleerde instructies:
- Hoe kan ik geselecteerde rijen bijwerken met waarden uit een CSV-bestand in Postgres?
- COPY-opdracht:kopieer alleen specifieke kolommen uit csv