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