grimboite/articles/dev/2016-06-23-extract-data-to-...

1.4 KiB

Title Date Slug Tags
Extraction de données en CSV avec PSQL 2015-06-23 extract-data-as-csv-with-psql db, sql, psql, csv, extract

Pour copier des résultats chopés depuis une commande psql, la syntaxe est relativement simple quand elle est décomposée. En gros, la commande ressemble à ceci:

$ psql -c "\copy (<ma_requête>) to <output_file> DELIMITER E'\t' CSV HEADER;" <db_user> <db_password>

Ce qui signifie plus prosaïquement:

Cher PSQL, copie-moi les résultats de <ma_requête> vers le fichier <output_file>, en utilisant une tabulation pour séparer les champs (tu peux inclure le HEADER, merci). Pour la connexion, tu peux utiliser <db_user> et <db_password>. Bisous.

Le script complet (en .bat), avec un fichier de sortie timestampé.

@echo off
set output_dir="C:\Extracts"
set db_host=localhost
set db_user=postgres
set db_name=db_name
set db_passwd=db_password
set psql_dir="C:\PSQL\9.2\bin"

for /f "tokens=1-3 delims=/ " %%i in ("%date%") do (
    set day=%%i
    set month=%%j
    set year=%%k
)

for /f "tokens=1-3 delims=: " %%l in ("%time%") do (
    set hour=%%l
    set min=%%m
)

set datestr=%year%%month%%day%_%hour%_%min%

set output_file=%output_dir%_%datestr%.list.txt

SET PGPASSWORD=%db_passwd%

%psql_dir%\psql -c "\copy (Select SubscriberId, LastName, FirstName From subscriber) to '%output_file%' DELIMITER E'\t' CSV HEADER;" %db_user% %db_passwd%