このエントリーをはてなブックマークに追加

psqlのちょっと便利な使い方

PostgreSQL Advent Calendar 2012の20日目です。他の人とは違ってゆるふわ記事です。

みなさま、フロントエンドにはなにを使ってらっしゃるでしょうか。pgadminはGUIでかなり便利ですが、標準で使えるpsqlもかなり便利です。

特にリモートのサーバーに入って作業するときなどpsqlの方が手軽ですよね。

というわけで、今回はpsqlのちょっとした使い方のご紹介です。「そんなの知ってるよ」とおっしゃらずにお付き合いください。

入力系

psqlにSQLを実行させるときには、-fでファイルを指定したり、-cで指定したりしますね。

これに加えて、標準入力からも受け取れます。

% echo "SELECT * FROM hoge" | psql testdb

さて、自分はEmacsな人なのですが、EmacsではM-|で選択したリージョンを標準入力として、指定した外部コマンドを実行出来ます。つまり、EmacsでSQLを書きつつ、サブクエリの部分だけ実行とかが簡単にできます。

vimはよく知りませんが、 範囲選択してw !で同じことができるそうです。

表示系

拡張テーブル形式モード

\xと打つと、拡張テーブル形式モードに切り替わります。この形式だと、横に長いレコードがあった場合にでも見やすくなります。

test=# select * from products;
 id |        name        |                            attributes
----+--------------------+-------------------------------------------------------------------
  1 | Geek Love: A Novel | "pages"=>"368", "author"=>"Katherine Dunn",
  "category"=>"fiction"
  2 | Geek Love: A Novel | "pages"=>"368", "author"=>"Katherine Dunn",
  "category"=>"fiction"
(2 行)

という行が、

test=# \x
拡張表示は on です。
test=# select * from products;
-[ RECORD 1 ]-----------------------------------------------------------------
id         | 1
name       | Geek Love: A Novel
attributes | "pages"=>"368", "author"=>"Katherine Dunn", "category"=>"fiction"
-[ RECORD 2 ]-----------------------------------------------------------------
id         | 2
name       | Geek Love: A Novel
attributes | "pages"=>"368", "author"=>"Katherine Dunn", "category"=>"fiction"

という感じになります。もっとカラムが増えるとより効果が分かります。

もう一度\xを打つと元に戻ります。なお、9.2からは\x autoと打つと長さに応じて自動的に切り替わるようになりました。

情報表示

\dで始まる一連のコマンドは、情報が表示されます。一部を取り上げますと、

\da
集約関数の一覧を表示する
\df
関数(集約/通常/トリガー/ウィンドウのみ)の一覧を表示する
\dT
データ型の一覧を表示する
\dv
ビューの一覧を表示する
\dx
拡張の一覧を表示する

あとは、\dではないし、9.1から追加されたものですが、

\sf 関数名
指定した関数の関数定義を表示する。複数定義がある場合は引数も指定する。

とかも便利です。

さらに、 最後に+をつけると付加情報が表示されるものもあります。例えば、\dは通常これだけですが

test=# \d
                  リレーションの一覧
 スキーマ |        名前         |     型     | 所有者
----------+---------------------+------------+--------
 public   | fluentd_store       | テーブル   | r_rudi
 public   | pg_all_foreign_keys | ビュー     | r_rudi
(2 行)

+をつけるとサイズも表示されます(注: 8.4から)。

test=# \d+
                            リレーションの一覧
 スキーマ |        名前         |     型     | 所有者 |   サイズ   |
 説明
----------+---------------------+------------+--------+------------+------
 public   | fluentd_store       | テーブル   | r_rudi | 56 kB      |
 public   | pg_all_foreign_keys | ビュー     | r_rudi | 0 bytes    |
(2 行)

詳しくは\?のヘルプをご覧ください。なお、この辺は結構頻繁に変わっているので、バージョンによっては使えなかったりしますので、ご注意ください。

編集系

\eを打つと、現在のクエリーバッファを外部エディタで編集できます。

外部エディタは環境変数EDITORを見るため、

% export EDITOR=emacsclient

とかしておくと、emacsでSQLが編集でき、C-x #を押せば編集終了してpsqlで実行されます。あ、vimでもいいですよ。ええほんと。

ちなみに、8.4から\efが追加され、関数の編集ができるようになりました。

まとめ

psqlのちょっと便利な使い方をゆるく紹介してみました。間違っていればご指摘ください。

あとバージョンが上がるにつれて、タブ補完が強力になっているので、使うといいですよー。

注意

別にvimをdisってるわけじゃないですよ…サーバー上ではvi使ってますし。