Você não pode pular os erros sem pular todo o comando até e incluindo o Postgres 14. Atualmente não há tratamento de erros mais sofisticado.
\copy
é apenas um wrapper em torno do SQL COPY
que canaliza os resultados através do psql. O manual para COPY
:
COPY
interrompe a operação no primeiro erro. Isso não deve causar problemas no caso de umCOPY TO
, mas a tabela de destino já recebeu linhas anteriores em umCOPY FROM
. Essas linhas não estarão visíveis ou acessíveis, mas ainda ocuparão espaço em disco. Isso pode significar uma quantidade considerável de espaço em disco desperdiçado se a falha ocorrer em uma operação de cópia grande. Você pode querer invocarVACUUM
para recuperar o espaço perdido.
Minha ênfase em negrito. E:
COPY FROM
gerará um erro se qualquer linha do arquivo de entrada contiver mais ou menos colunas do que o esperado.
COPY
é uma maneira extremamente rápida de importar/exportar dados. Verificações sofisticadas e tratamento de erros o atrasariam. Houve uma tentativa de adicionar o registro de erros a
COPY
no Postgres 9.0, mas nunca foi confirmado. Solução
Corrija seu arquivo de entrada.
Se você tiver uma ou mais colunas adicionais em seu arquivo de entrada e o arquivo for consistente de outra forma , você pode adicionar colunas fictícias à sua tabela
isa
e solte-os depois. Ou (mais limpo com tabelas de produção) importe para uma tabela temporária e INSERT
colunas selecionadas (ou expressões) para sua tabela de destino isa
de lá. Respostas relacionadas com instruções detalhadas:
- Como atualizar linhas selecionadas com valores de um arquivo CSV no Postgres?
- Comando COPY:copia apenas colunas específicas do csv