8
votes

Copiez plusieurs fichiers CSV dans Postgres

J'écris un script SQL pour copier plusieurs fichiers .csv dans une base de données Postgres comme suit: xxx pré>

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;


1 commentaires

6 Réponses :


13
votes

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'


0 commentaires

8
votes

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


0 commentaires

2
votes

Vous pouvez faire boucler les noms de fichiers à l'aide de pg_ls_dir. xxx


1 commentaires

Conditions d'autorisation d'utilisation pg_ls_dir diffère de la version PG. Fonctionne sur PG 13 sur le bureau mais pas sur le serveur.



4
votes

2 commentaires

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



2
votes

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. XXX


1 commentaires

Conditions d'autorisation d'utilisation pg_ls_dir diffère de la version PG. Fonctionne sur PG 13 sur le bureau mais pas sur le serveur.



5
votes

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 : xxx


0 commentaires