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