PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Copia alcune delle colonne di un file CSV in una tabella

Se si tratta di un'attività ad hoc

Crea una tabella temporanea con tutte le colonne nel file di input

create temporary table t (x1 integer, ... , x10 text)

Copia dal file al suo interno:

copy t (x1, ... , x10)
from '/path/to/my_file'
with (format csv)

Ora inserisci nella tabella definitiva dal temp:

insert into my_table (x2, x5, x7, x10)
select x2, x5, x7, x10
from t

E rilascialo:

drop table t

Se è un'attività frequente

Usa il file_fdw estensione. Come superutente:

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' )
;

Concedi il permesso di selezione sulla tabella all'utente che lo leggerà:

grant select on table my_csv to the_read_user;

Quindi, quando necessario, leggi direttamente dal file csv come se fosse una tabella:

insert into my_table (x2)
select x2
from my_csv
where x1 = 2