pgclimb とは
PostgreSQL データベースに psql コマンドで接続してレポートを作るとなると、"\o [ファイル名]" で出力をスプールしてファイル出力していますよね。しかしここで紹介する pgclimb を使えば psql コマンドを使わずとも CSV や JSON、XML、EXCEL ファイルを作成できます。
通常 psql コマンドでクエリーを叩くと次のような結果が表示されます。
=> SELECT * FROM pg_language ; lanname | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl ----------+---------+--------------+---------------+--------------+-------- internal | f | f | 0 | 2246 | c | f | f | 0 | 2247 | sql | f | t | 0 | 2248 | plpgsql | t | t | 148331 | 148332 | plperl | t | t | 1461356 | 1461357 | (5 rows)
また psql コマンドで出力内容を CSV ファイルなどに出力するために以下のように "\o [ファイル名]" としていますよね。これって結構面倒です。
=> \pset format unaligned Output format is unaligned. => \pset fieldsep ',' Field separator is ",". => \o result.csv => SELECT * FROM pg_language ; => \o
pgclimb ツールの導入
では pgclimb コマンドをダウンロードしましょう。ここでは Linux x86_64 の場合です。$ wget -O pgclimb https://github.com/lukasmartinelli/pgclimb/releases/download/v0.2/pgclimb_linux_amd64 $ chmod +x pgclimb $ ./pgclimb --help
pgclimb コマンドを実行
では早速先程実行したクエリーを pgclimb を使って CSV 形式と jsonlines という形式で出力してみましょう。まずは CSV 形式での出力方法です。
$ ./pgclimb --host hogehoge -p 5432 -U pikachu -c "SELECT * FROM pg_language" csv internal,0,2246 c,0,2247 sql,0,2248
次に jsonlines という形式での出力方法です。
$ ./pgclimb --host hogehoge -p 5432 -U pikachu -c "SELECT * FROM pg_language" jsonlines {"lanacl":null,"lanispl":false,"lanname":"internal","lanplcallfoid":0,"lanpltrusted":false,"lanvalidator":2246} {"lanacl":null,"lanispl":false,"lanname":"c","lanplcallfoid":0,"lanpltrusted":false,"lanvalidator":2247} {"lanacl":null,"lanispl":false,"lanname":"sql","lanplcallfoid":0,"lanpltrusted":true,"lanvalidator":2248}
また結果を画面に表示するのではなく、直接ファイルに保存したい場合には次のようにします。ここでは EXCEL ファイルに結果を保存してみます。
$ ./pgclimb --host hogehoge -p 5432 -U pikachu -c "SELECT * FROM pg_language" --output hoge.xlsx xlsx --sheet "pg_language_result"
その結果、"hoge.xlsx" という EXCEL ファイルが作成され、EXCEL シート名は "pg_language_result" となっているのが確認できると思います。