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使ってますし。

Comments

comments powered by Disqus