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

Importation d'un fichier CSV compressé dans PostgreSQL

Il existe une vieille astuce pour utiliser un tube nommé (fonctionne sous Unix, je ne connais pas Windows)

  • créer un tube nommé :mkfifo /tmp/omyfifo
  • y écrire le contenu du fichier :zcat mycsv.csv.z > /tmp/omyfifo &
  • [from psql] copy mytable(col1,...) from '/tmp/omyfifo'
  • [une fois terminé] :rm /tmp/omyfifo

Le zcat en arrière-plan bloquera jusqu'à ce qu'un lecteur (ici :le COPY commande) commencera la lecture et se terminera à EOF. (ou si le lecteur ferme le tuyau)

Vous pouvez même démarrer plusieurs paires pipes + zcat, qui seront récupérées par plusieurs COPY instructions dans votre script sql.

Cela fonctionnera à partir de pgadmin, mais le fifo (+ processus zcat) doit être présent sur la machine sur laquelle le serveur SGBD s'exécute.

BTW :une astuce similaire utilisant netcat peut être utilisée pour lire un fichier à partir d'une machine distante (qui doit bien sûr écrire le fichier sur le socket réseau)