sql >> Database >  >> RDS >> PostgreSQL

Fouten negeren met psql \copy meta-command

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 een COPY TO , maar de doeltabel heeft al eerdere rijen ontvangen in een COPY 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 op VACUUM 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


  1. Prestaties van sys.partitions

  2. Oracle-triggerfout ORA-04091

  3. Een database handmatig comprimeren en repareren in Access 2016

  4. Een weergave maken in PostgreSQL