Copia os dados csv ao mesmo tempo que preenche a coluna serial

3

Eu criei minha primeira tabela postgres e estou tentando descobrir como copiar um arquivo .csv na tabela, gerando simultaneamente um número de série na coluna 1 (ID) que começa no número 1 e conta para cima (ou seja, 1, 2, 3, etc) para cada linha. Eu tenho usado o comando:

COPY sales_table FROM '/home/perl_experiments/xmlcsv.txt' (DELIMITER('|'));

Isso tenta copiar o conteúdo do csv, mas parece estar colocando a primeira coluna de dados do .csv na primeira coluna da tabela. Eu especifiquei a primeira coluna da tabela para ser um bigserial e presumi que essa coluna fosse preenchida automaticamente, enquanto o conteúdo do csv ignoraria a coluna 1 e começaria a preencher a tabela da coluna 2. Obviamente, este não é o caso e eu tenho perdeu um passo vital. Alguém poderia lançar alguma luz sobre o passo que perdi? Aqui está um resumo da tabela que criei:

Column  Type   Not Null  Default        
ID      bigint NOT NULL  nextval('"sales_table_Entry        Id_seq"'::regclass)     [pk]        

ProdNo  bigint  

Title   character varying   

url     character varying   

Price   integer     
    
por neilH 17.04.2016 / 14:36

1 resposta

5

Você pode especificar as colunas individuais para preencher o comando COPY :

COPY table_name [ ( column [, ...] ) ]
    FROM { 'filename' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]

( link )

Portanto, especifique suas colunas CSV explicitamente no COPY , deixando de fora a coluna bigserials.

    
por 17.04.2016 / 14:44