
Se você já precisou importar dados de um CSV ou text para o PostgreSQL, especialmente em ambientes de homologação ou quando integra dados públicos, sabe bem: bastava uma tabulação fora do lugar, um caractere inválido ou um tipo incompatível para tudo travar. Era como tropeçar na primeira pedra do caminho.
Antes da versão 17, qualquer erro em uma linha durante a execução do COPY fazia a operação ser interrompida. Isso exigia que o arquivo fosse revisado e corrigido antes de tentar novamente — um processo demorado, especialmente com arquivos grandes ou dados vindos de fontes externas sem garantia de qualidade.
Com o PostgreSQL 17, isso mudou. E esse foi um dos assuntos do Café Com Postgres: Novidades do PostgreSQL 17, onde o Emanuel consultor da Timbira, falou um pouco sobre uma das melhorias mais práticas e bem-vindas para quem lida com importação de dados no dia a dia: o novo comportamento opcional do comando COPY.
A nova opção: ON ERROR IGNORE
Agora, ao usar o comando COPY, é possível adicionar a cláusula ON ERROR IGNORE para que o PostgreSQL ignore linhas com erro durante o carregamento dos dados. Isso permite que:
- As linhas válidas sejam importadas normalmente;
- As linhas com erro sejam identificadas ao final do processo, facilitando a revisão posterior;
- O processo não seja mais interrompido por pequenas inconsistências.
Exemplo prático
psql
COPY produtos FROM '/caminho/para/arquivo.csv' WITH (FORMAT csv, HEADER true) ON ERROR IGNORE;
Antes
- Um valor textual em uma coluna numérica travava o processo inteiro.
- Você precisava abrir o CSV, localizar o erro (muitas vezes sem indicação clara), corrigir, salvar e tentar novamente.
Agora
- O PostgreSQL pula essa linha problemática, importa o resto, e te avisa ao final quantas linhas foram ignoradas.
- Quando a opção ´LOG_VERBOSITY´ é configurada como VERBOSE, o PostgreSQL registra uma mensagem detalhada para cada linha do arquivo de entrada que apresenta falhas. Esse log inclui informações específicas sobre o erro, simplificando a identificação e correção de problemas no processo de importação.
Quando isso faz a diferença?
- Ambientes de testes e homologação: carregar rapidamente um dump público mesmo que nem tudo esteja perfeito.
- Importações automatizadas: em processos que rodam diariamente, como atualização de preços, a falha de uma linha não impede o carregamento de milhões de outras.
- Usuários menos técnicos: nem todo mundo tem domínio de expressões regulares ou ferramentas para higienizar os dados rapidamente.
- Flexibilidade em Dados Imperfeitos: ideal para trabalhar com dados de fontes externas, que frequentemente contêm inconsistências.
Conclusão
Essa pequena mudança tem um grande impacto em produtividade e confiabilidade. O comando COPY continua, por padrão, parando ao encontrar erros (ON ERROR STOP), o que preserva a segurança em ambientes que exigem rigor. Mas agora existe a escolha — e ela pode fazer toda a diferença.
-> Assista à live completa e confira outras conversas sobre PostgreSQL na playlist do #CaféComPostgres no YouTube.