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