概要
リモート環境にsshで接続して、DBからcsvをローカルに落としたい場面が多々あったので備忘録として残しておこうと思いました。
環境
DBエンジン: PostgreSQL11.6
ローカルクライアント: macOS Big Sur
リモートサーバー: Amazon Linux 2
csvを出力
まずはssh接続します。
$ ssh -i [秘密鍵ファイル] [リモートユーザー]@[リモートIPアドレス(ホスト名)]
今回は指定したSQLの出力結果をcsvに出力したかったのでその方法を2通りほど記述します。
テーブルを丸ごとcsv出力したい場合はCOPY
コマンドを使ってください。
①psqlコマンドでcsv出力する
# -A: 位置揃えなし
# -F: 区切り文字指定
$ psql -U [DBユーザ名] -h [DBホスト名] -d [DB名] -c "SQL文" -F ',' -A > example.csv
# csvができているか確認
$ less example.csv
csvが確認できたら接続を閉じます
$ exit
②DB接続してからcsv出力する
一度DBに接続します
$ psql -U [DBユーザ名] -h [DBホスト名] -d [DB名]
以下のコマンドを叩いていきます
=> \o example.csv
=> \a
=> \f ','
=> [SQL文]
=> \o
# 接続終了
=> \q
# csvができているか確認
$ less example.csv
csvが確認できたら接続を閉じます
$ exit
scpコマンドでローカルに持ってくる
scpコマンドとは?
SSHプロトコルを使用したホスト間のファイル転送ができます。
基本的には以下の構文となります。
$ scp [オプション] コピー元 コピー先
実行
今回はDownloadsディレクトリに落とします
$ scp -i [秘密鍵ファイル] [リモートユーザ名]@[リモートIPアドレス(ホスト名)]:~/example.csv ~/Downloads
# csvを確認
$ less ~/Downloads/example.csv