RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

知っていると便利かも?psqlコマンドのオプション4選

f:id:FM_Harmony:20181022092416p:plain

初めに

こんにちは!エンジニアのid:FM_Harmonyです。

前回はgitのfetchコマンドについて、記事を投稿しました。 tech-blog.rakus.co.jp

今回はpostgreSQLの対話型ターミナル、psqlのオプションについて紹介したいと思います。
普段の業務でも、psqlコマンドの-fオプションや-cオプションを利用してクエリを発行する機会が多いのですが、psqlには他にも便利なオプションが備わっています。
多くのオプションが存在しますが、今回はその中でも個人的に便利だと思う4つのオプションについて紹介します。

-a:発行したクエリ、コメントも出力する

psqlコマンドを利用してSQLファイルやクエリの発行を行った場合、実行結果のみ出力されます。
sample.sql

--this is comment
SELECT columnA, columnB FROM some_table;
$ psql -U postgres -d some_db -f sample.sql
 columnA | columnB
---------+---------
 A       | B
(1行)

この時、psqlコマンドに-aオプションを指定することで、発行したクエリやSQLファイルに記載したコメントも出力することができます。

$ psql -U postgres -d some_db -f sample.sql -a
--this is comment
SELECT columnA, columnB FROM some_table;
 columnA | columnB
---------+---------
 A       | B
(1行)

このオプションを使うことで、例えばSQLファイルの実行結果ログをレビューしてもらう際など、レビュー者がSQLファイルの実行コマンドを把握しやすくなります。

-t:抽出結果のみ出力

通常、psqlコマンドを用いて抽出結果を出力する場合、列名や出力した行を出力結果に含めます。

$ psql -U postgres -d some_db -c "SELECT columnA, columnB FROM some_table;"
 columnA | columnB
---------+---------
 A       | B
(1行)

psqlコマンドに-tオプションを指定することで、抽出結果から列名や行数表示を除いて出力することができます。

$ psql -U postgres -d some_db -c "SELECT columnA, columnB FROM some_table;" -t
 A       | B

例えば、psqlで抽出した結果を基にして何らかの繰り返し処理を行うスクリプトを作成する際など、抽出結果に列名や行数表示は必要ない場合があります。 そこで、このオプションを使うことでそれらを除いた出力結果を取得することができます。

-A:位置揃えを行わない

psqlコマンドを利用した際の抽出結果は、表形式に整形されて出力されます。

$ psql -U postgres -d some_db -c "SELECT columnA, columnB FROM some_table;"
 columnA | columnB
---------+---------
 A       | B
(1行)

この時、psqlコマンドに-Aオプションを利用することで、位置揃えなしの区切り文字を|とした形式で抽出結果を出力することができます。

$ psql -U postgres -d some_db -c "SELECT columnA, columnB FROM some_table;" -A
columnA|columnB
A|B
(1行)

主にこのオプションは、次の-Fオプションと組み合わせて抽出結果の出力形式を変更する際に利用します。

-F:区切り文字を指定する

前述の-Aオプションと共に利用することで、抽出結果の出力形式を変更することができます。
-Fオプションの後に指定した文字を、抽出結果の区切り文字に指定します。

$ psql -U postgres -d some_db -c "SELECT columnA, columnB FROM some_table;" -A -F :
columnA:columnB
A:B
(1行)

利用例:抽出結果からcsvファイルを作成する

今回紹介したオプションの利用例として、データベースの抽出結果からcsvファイルを作成する方法をご紹介します。

この場合、-A-Fオプションが有効です。 2つのオプションを組み合わせて区切り文字をカンマにすることで、抽出結果をcsvファイルの形式で出力することができます。

$ psql -U some_user -d some_db -c "SELECT columnA, columnB FROM some_table;" -A -F ,
columnA,columnB
A,B
(1行)

あとは、出力結果に対してリダイレクトなどを用いることで、抽出結果からcsvファイルを作成することができます。

また、列名はCSVファイルに含めるが、行数は含めたくないという場合、grepコマンドなどと組み合わせて行数表示を出力結果から除くと良いでしょう。

# 行数表示を削除する一例
$ psql -U some_user -d some_db -A -F , -c "SELECT * FROM some_table;" | grep -v "行"
columnA,columnB
A,B

終わりに

psqlのオプションをいくつか紹介してみましたが、いかがでしたでしょうか。

今回紹介したオプションは抽出結果に影響を与えるものばかりですが、もちろんデータの追加や更新時に利用できるオプションも存在します。
ただ、psqlコマンドを利用する目的として多いのは、やはりデータ抽出だと思います。 なので、今回紹介したオプションを利用できる機会というのは、ほかのオプションに比べて多いように感じます。

皆さまもpsqlコマンドを利用される際は、今回紹介したオプションの利用を検討してみてはいかがでしょうか。

参考

psql - PostgreSQL 9.6.5文書

Copyright © RAKUS Co., Ltd. All rights reserved.