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

Copie algumas das colunas de um arquivo csv em uma tabela

Se for uma tarefa ad hoc


Crie uma tabela temporária com todas as colunas no arquivo de entrada
create temporary table t (x1 integer, ... , x10 text)

Copie do arquivo para ele:
copy t (x1, ... , x10)
from '/path/to/my_file'
with (format csv)

Agora insira na tabela definitiva do temp:
insert into my_table (x2, x5, x7, x10)
select x2, x5, x7, x10
from t

E solte:
drop table t

Se for uma tarefa frequente


Use o file_fdw extensão. Como superusuário:
create extension file_fdw;

create server my_csv foreign data wrapper file_fdw;

create foreign table my_csv (
    x1 integer,
    x2 text,
    x3 text
) server my_csv
options (filename '/tmp/my_csv.csv', format 'csv' )
;

Conceda permissão de seleção na tabela ao usuário que a lerá:
grant select on table my_csv to the_read_user;

Então sempre que necessário leia diretamente do arquivo csv como se fosse uma tabela:
insert into my_table (x2)
select x2
from my_csv
where x1 = 2