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