PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como ignorar erros com psql \copy meta-command


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 um COPY TO , mas a tabela de destino já recebeu linhas anteriores em um COPY 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 invocar VACUUM 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