PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Copiez quelques-unes des colonnes d'un fichier csv dans un tableau

S'il s'agit d'une tâche ad hoc

Créer une table temporaire avec toutes les colonnes du fichier d'entrée

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

Copiez le fichier dedans :

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

Insérez maintenant dans le tableau définitif à partir du temp :

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

Et lâchez-le :

drop table t

S'il s'agit d'une tâche fréquente

Utilisez le file_fdw extension. En tant que superutilisateur :

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

Accordez l'autorisation de sélection sur le tableau à l'utilisateur qui le lira :

grant select on table my_csv to the_read_user;

Ensuite, chaque fois que nécessaire, lisez directement le fichier csv comme s'il s'agissait d'un tableau :

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