psqlコマンドのお勧め設定

実はpsqlコマンドは色付きプロンプトを始めとして意外と便利な設定ができるようになっています。わたしが使っているおすすめの ~/.psqlrc を書いておきます。

\set PROMPT1 '%[%033[1;32m%]%n %`date +%H:%M` %R%#%[%033[0m%] '
\set PROMPT2 '%[%033[1;32m%]%R%#%[%033[0m%] '
\timing on
\set HISTSIZE 1000000

以下解説

PROMPT1, PROMPT2

お約束の色付きプロンプト。 上記設定は緑のボールドにしていて、色を抜かすとこう↓なります。

'%n %`date +%H:%M` %R%# '

表示すると「aamine 18:05 =>」みたいな感じです。以下解説。

  • %[...%] : エスケープが有効
  • %033 : ESC文字
  • %n : ユーザー名
  • %cmd : 任意のコマンド実行
    • date +%H:%M は時刻を HH:MM 形式で表示します。Redshiftではクエリーを長時間実行するため、何時に投げたんだっけこれ……みたいな気持によくなるので付けました。
  • %R : 最初の行では "=" で 2 行目から "-"
  • %# : スーパーユーザーなら "#"、一般ユーザーなら ">"

実行時間表示

\timing on でクエリー実行後に実行時間が表示されます。 ミリ秒で。秒単位がいいんだけど単位は変えられないっぽい。

ヒストリ

\set HISTSIZE 1000000 は数値はまあなんでもよくて、とにかく捨てるなよ!という設定。

psqlコマンドのオプションとパスワード入力を省略する

psqlコマンドの設定シリーズ第二弾。

ホスト名とかのデフォルトを設定する

psqlでDBに接続するときはこんなコマンドで接続しますが……

psql -h xxxx.ap-northeast-1.redshift.amazonaws.com -p 5439 -U myuser dev

これオプション多くて面倒じゃないですか。 そこで以下のように環境変数を設定しておけばオプションは全部省略できます。

export PGHOST=xxxx.ap-northeast-1.redshift.amazonaws.com
export PGPORT=5439
export PGDATABASE=dev
export PGUSER=myuser

ユーザー名だけ変えたいみたいなときは、 変えたいものだけ明示的にオプションを指定すればよいです。

パスワード入力を省略する

最後に残るのがパスワード入力ですが、実はこれも省略できます。 ~/.pgpass ファイルに以下のように書いて、chmod 600 しておけば psql コマンドが勝手に読み込みます。

ホスト名:ポート番号:データベース名:ユーザー名:パスワード

mode 600 にしないと psql が読んでくれないので注意。