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

Commande COPY :copier uniquement des colonnes spécifiques à partir de csv

Soit prétraiter le fichier CSV, soit (ce que je ferais probablement) importer dans une copie temporaire de la table cible et INSERT uniquement les colonnes sélectionnées dans une seconde étape :

CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0;
ALTER TABLE tmp ADD COLUMN etra_column1 text
             ,  ADD COLUMN etra_column2 text;  -- add excess columns
COPY tmp FROM '/path/tp/file.csv';

INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM tmp  -- only reelvant columns
WHERE  ...  -- optional, to also filter rows

Une table temporaire est supprimée automatiquement à la fin de la session. Si le traitement prend plus de temps, utilisez une table normale.