PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come ignorare gli errori con psql \copy meta-comando

Non puoi saltare gli errori senza saltare l'intero comando fino a Postgres 14 incluso. Al momento non esiste una gestione degli errori più sofisticata.

\copy è solo un wrapper di SQL COPY che canalizza i risultati tramite psql. Il manuale per COPY :

COPY interrompe il funzionamento al primo errore. Ciò non dovrebbe causare problemi in caso di COPY TO , ma la tabella di destinazione avrà già ricevuto righe precedenti in un COPY FROM . Queste righe non saranno visibili o accessibili, ma occupano comunque spazio su disco. Ciò potrebbe comportare una notevole quantità di spazio su disco sprecato se l'errore si verificasse durante un'operazione di copia di grandi dimensioni. Potresti voler invocare VACUUM per recuperare lo spazio sprecato.

Enfasi in grassetto mio. E:

COPY FROM genererà un errore se una qualsiasi riga del file di input contiene più o meno colonne del previsto.

COPY è un modo estremamente veloce per importare/esportare dati. Controlli sofisticati e gestione degli errori lo rallenteranno.

Si è verificato un tentativo di aggiungere la registrazione degli errori a COPY in Postgres 9.0 ma non è mai stato eseguito il commit.

Soluzione

Correggi invece il tuo file di input.

Se hai una o più colonne aggiuntive nel tuo file di input e il file è altrimenti coerente , potresti aggiungere colonne fittizie alla tua tabella isa e lasciarli cadere in seguito. Oppure (pulitore con tabelle di produzione) importare in una tabella di staging temporanea e INSERT colonne (o espressioni) selezionate nella tabella di destinazione isa da lì.

Risposte correlate con istruzioni dettagliate:

  • Come aggiornare le righe selezionate con i valori di un file CSV in Postgres?
  • Comando COPIA:copia solo colonne specifiche da csv