O comando PostgreSQL COPY
tem a opção de escolher para quais campos mapear as colunas CSV?
O comando PostgreSQL COPY
parece esperar que a tabela de destino corresponda exatamente às suas colunas. Estou perdendo alguma coisa ou é assim que realmente funciona?
Existe algum comando alternativo que permite isso?
É absolutamente possível - a documentação sempre útil vem em socorro, novamente:
O que significa que você pode fazer algo assim:
O que você não pode fazer é referenciar colunas do arquivo CSV. Para superar isso, pode-se criar uma tabela intermediária com o número e o tipo de colunas correspondentes, fazer o
COPY
nela e, em seguida, fazer umINSERT ... SELECT ...
no destino final. Com base em uma observação importante de Patrick7 , a tabela intermediária pode ser definida comoUNLOGGED
, economizando muito overhead do WAL quando a tabela é grande.Obtenha uma cópia do CSVKit
Ou csvquote