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 :
COPYstopt 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 opVACUUMom de verspilde ruimte terug te winnen.
Vetgedrukte nadruk van mij. En:
COPY FROMzal 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