sql >> Base de Datos >  >> RDS >> PostgreSQL

Copie algunas de las columnas de un archivo csv en una tabla

Si es una tarea ad hoc

Cree una tabla temporal con todas las columnas en el archivo de entrada

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

Copie del archivo en él:

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

Ahora inserte en la tabla definitiva de la temperatura:

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

Y suéltalo:

drop table t

Si es una tarea frecuente

Usa el file_fdw extensión. Como superusuario:

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

Otorgue permiso de selección en la tabla al usuario que la leerá:

grant select on table my_csv to the_read_user;

Luego, cuando sea necesario, lea directamente del archivo csv como si fuera una tabla:

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