Deixe-me começar esta pergunta afirmando que minha experiência com DBA é limitada a um curso universitário introdutório de graduação e que estou apenas começando com o PostgreSQL.
Gostaria de importar dados programaticamente de um CSV plano incrivelmente grande (~ 4 GB) (eu sei, não é o melhor formato, mas é com o que tenho que trabalhar) em um banco de dados PostgreSQL regularmente. Acredito que posso usar COPY FROM
para realizar esta tarefa. O que ocorre quando uma linha CSV que corresponde ou entra em conflito com um registro existente é encontrada? Ele atualiza o registro, o ignora ou gera um erro? Esse comportamento é mutável?
A documentação afirma, em parte:
COPY FROM invocará quaisquer gatilhos e verificará as restrições na tabela de destino. No entanto, ele não invocará regras.
Minha interpretação dessa declaração é que, em vez de atualizar um registro existente, essa declaração trataria a entrada CSV como um novo registro, o que, por sua vez, violaria as restrições que podem ser colocadas nas colunas. Isso está correto? Nesse caso, parece que meu único curso de ação seria emitir DELETE
nas tabelas antes de importar os dados todas as vezes. Isso me parece altamente ineficiente.
ATUALIZAR
Uma amostra do conjunto de dados com o qual estou trabalhando pode ser encontrada aqui . Gostaria de importar e normalizar os dados desta fonte altamente desnormalizada. Como você pode ver, cada registro de licença pode ser duplicado para cada antena relacionada que possa existir.
O
COPY FROM
não violará a integridade do banco de dados.Quando uma restrição falha, um erro é lançado e nenhum dos dados é copiado (ele é revertido).
Este comportamento é imutável. Você pode fazer um script em uma linguagem de programação para ajudá-lo em uma cópia.