J'écris un script SQL pour copier plusieurs fichiers .csv dans une base de données Postgres comme suit: J'ai plusieurs fichiers que je veux copier. Je ne veux pas: COPY product(title, department) from 'ys1.csv' CSV HEADER;
COPY product(title, department) from 'ys2.csv' CSV HEADER;
COPY product(title, department) from 'ys3.csv' CSV HEADER;
COPY product(title, department) from 'ys4.csv' CSV HEADER;
COPY product(title, department) from 'ys5.csv' CSV HEADER;
6 Réponses :
Dans le tuyau Linux, la sortie des fichiers liste à PSQL. FAIRE COPY CODE> Utilisez l'entrée Standard: cat /path_to/ys*.csv | psql -c 'COPY product(title, department) from stdin CSV HEADER'
J'ai essayé la réponse ci-dessus mais j'ai eu une erreur lorsque vous travaillez avec plus d'un fichier. Je pense que sur le deuxième fichier, il n'a pas coupé l'en-tête.
Ceci a travaillé pour moi: P>
# get filenames
IMPFILES=(path/FileNamepart.csv)
# import the files
for i in ${IMPFILES[@]}
do
psql -U user -d database -c "\copy TABLE_NAME from '$i' DELIMITER ';' CSV HEADER"
# move the imported file
mv $i /FilePath
done
Vous pouvez faire boucler les noms de fichiers à l'aide de pg_ls_dir.
Conditions d'autorisation d'utilisation pg_ls_dir code> diffère de la version PG. Fonctionne sur PG 13 sur le bureau mais pas sur le serveur.
Démarrage de Postgres 9.3, vous pouvez exécuter une commande shell à l'aide du programme Programme Code> dans le copie code> commande .
Remarque - cela ne fonctionne pas si chaque fichier a la tête dans le CSV.
Le format jette un problème pour moi (Postgres 11). Cela fonctionne (et ignorant l'en-tête): \ Copy Test du programme 'Cat ~ / Documents / Scratch / 1Col_text * .csv' avec (format CSV, Délimiteur ',', en-tête);
Une seule option plus, en utilisant pg_ls_dir et format (). Insertion de tous les fichiers du dossier 'E: \ Online_Monitoring \ Traitement \' dans la table Onlmon_t_online_Monitoring.
Conditions d'autorisation d'utilisation pg_ls_dir code> diffère de la version PG. Fonctionne sur PG 13 sur le bureau mais pas sur le serveur.
Si vous souhaitez utiliser le programme (code> (Postgres> 9.3) Mots-clés, mais vous avez l'en-tête dans chaque fichier CSV, vous pouvez utiliser awk code>:
Utilisation d'un
faire code> peut-être? postgreSQL.org/docs/current/static/sql-do.html < / a>