Tips pour exporter une requête SQL au format CSV

Assez fréquemment on me demande d'exporter des données contenues dans une base de donnée au format CSV. Parfois une simple table, parfois une requête plus complexe est nécessaire. Si les données n'ont pas besoin d'être modifiées, il est possible d'exporter les données directement depuis la base de donnée sans passer par un langage de programmation.

Exporter un CSV avec MySQL / MariaDB

Il n'existe rien de natif avec ces deux bases de données. Mais sous Linux, il est possible d'y arriver assez facilement en utilisant la commande sed en plus du binaire mysql.
Il suffit de retourner le résultat de la requête SQL vers la sortie standard et d'utiliser sed pour modifier ce résultat avant de l'écrire dans un fichier.

> mysql -hdatabase -uroot -ptest dbname -e "SELECT * FROM some_table;" | sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > export.csv

Cela peut sembler un peu indigeste et je suis sûr qu'il y a certains cas limite, mais pour le moment cette commande a répondue à tous mes besoins. La requête SQL pouvant être bien plus complexe selon les besoins de l'export.

Exporter un CSV avec PostgreSQL

Cette fois c'est beaucoup plus simple. PostgreSQL fournit une implémentation qui fait le travail tout seul via l'instruction \copy une fois connecté à la base de donnée.

\copy (select * from some_table) to 'export.csv' CSV HEADER;

Là encore la requête peut être plus complexe en fonction du besoin.


Ajouter un commentaire