■ はじめに
PostgreSQLへの更新処理に関する単体試験のエビデンスとして、 CSV出力したいなっと思って調べてみたことをメモ。
目次
案1:COPYコマンドを利用する 案2:-cオプション + SELECT文 を利用する 番外編:DBクライアントソフトを使う
■ 案1:COPYコマンドを利用する
以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2020/06/11/112650
■ 案2:-cオプション + SELECT文 を利用する
構文
psql -h [ホスト] -d [DB名] -U [ユーザー名] -c "SELECT文;" -A -F, > [CSV出力先]
psql の オプション
-A : 位置揃えなしの出力 -F [区切り文字] : 出力する際の区切り文字の指定 => 区切り文字として「,」を指定すればCSV出力になる
サンプル
例1:psqlコマンド
psql -h localhost -d postgres -U postgres -c "SELECT * FROM person WHERE id='X0001'" -A -F, >"./results/output.csv"
例2:シェルスクリプト
#!/bin/bash TARGET_ID=${0} HOST="localhost" DB_NAME="postgres" USER="postgres" OUTPUT_CSV="./results/output_$(date '+%Y%m%d').csv" echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')" # Execute psql -h ${HOST} -d ${DB_NAME} -U ${USER} -c "SELECT * FROM person WHERE id='${TARGET_ID}'" -A -F, >${OUTPUT_CSV} echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
例3:システムカタログ pg_tables でテーブル一覧をCSV出力
#!/bin/bash HOST="localhost" DB_NAME="postgres" USER="postgres" OUTPUT_CSV="./output_$(date '+%Y%m%d').csv" # Execute (テーブルのスキーマ名/テーブル名を出力) psql -h ${HOST} -p ${PORT} -d ${DB_NAME} -U ${USER} -c "select schemaname, tablename from pg_tables" -A -F, >${OUTPUT_CSV} echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
補足:システムカタログ pg_tables
* システムカタログにあるテーブルに関する情報が 纏められているテーブル
https://www.postgresql.jp/document/8.0/html/view-pg-tables.html
参考文献
https://morinohito.site/it/command/select-csv-output
■ 番外編:DBクライアントソフトを使う
以下の関連記事の「【1】 HeidiSQL」「【2】 A5:SQL Mk-2++」などの CSV出力機能を使用する。
DBクライアントツール
https://dk521123.hatenablog.com/entry/2016/05/08/152815
関連記事
よく使う pdqlコマンド
https://dk521123.hatenablog.com/entry/2020/01/10/224818
psql で 変数 / 定数を使う
https://dk521123.hatenablog.com/entry/2020/01/23/223756
PostgreSQLのDBをエクスポート/インポートするスクリプト
https://dk521123.hatenablog.com/entry/2018/03/02/232623
ファイルからSQL文を一括で実行するには ~pdqlコマンドの利用~
https://dk521123.hatenablog.com/entry/2014/09/11/002003
COPY コマンド ~ COPY FROM / TO ~
https://dk521123.hatenablog.com/entry/2020/06/11/112650