Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
11年弱前投稿 修正あり

PostgreSQLのコマンドラインの動きを改善してみる

PostgreSQLのコマンドラインツールpsqlのプロンプトを便利に変えてみよう。

原文
Improving the Command-Line Postgres Experience (English)
翻訳依頼者
D98ee74ffe0fafbdc83b23907dda3665
翻訳者
D98ee74ffe0fafbdc83b23907dda3665 doublemarket
原著者への翻訳報告
未報告


~/.psqlrc設定ファイルとそのオプションを理解すること、他人の~/.psqlrcを読むことは、Postgresのコマンドラインでの作業をより楽しいものにしてくれる。

プロンプトを変える

デフォルトでは、プロンプトは少々つまらない。

$ psql my_database
my_database=#

飾り立ててみよう。

プロンプトを変更するたくさんのオプションがある。色をつけたり、ドメイン名を入れたり、現在操作しているデータベースの名前を入れたり、色々できる。

\set PROMPT1 '%[%033[1m%]%M %n@%/%R%[%033[0m%]%# '
  • %[..%] は、デフォルトのプロンプトを太字の黒に変更する
  • %Mは「データベースサーバのドメイン名付きのホスト名、あるいはUnixドメインソケット経由の接続の場合[local]」
  • %nはデータベースのユーザ名
  • %/はデータベース名
  • %Rは「通常は=シングルラインモードでは^、データベースからセッションが切断された状態では!」切断されているのが見えるのは良い
  • 最後の%[...%]は太字の黒をリセットする
  • %#は、スーパーユーザの時は#、それ以外では>

ローカルデータベースの場合こうなる。

-bash-4.1$ psql
"help" でヘルプを表示します.

[local] postgres@postgres=# \q

さらにプロンプトを変える

お利口さんのあなた方のことだから、PROMPT1という設定を見ればPROMPT2があることが推測できるだろう。当たりだ!これがPROMPT2だ。

\set PROMPT2 '[more] %R > '

PROMPT2は、psqlがさらに入力を求める時、例えば、SELECT * FROMと入力してEnterを押した時だ。まだセミコロンを入力していないので、psqlは我慢強くPROMPT2を表示して待つ。

以下、要約。

  • [more][more]のリテラル文字列
  • PROMPT2内の%Rは、PROMPT1のそれとは違う意味がある。「PROMPT2では、シーケンスは-\*、シングルクオート、ダブルクオート、ドル記号のいずれかに、psqlが入力を待っているかどうかで置き換えられる。/\* ... \*/コメントの中なのか、クオートで囲んだ中なのか、ドル記号でエスケープした文字列内なのかによる。」

これは不自然な例。

[local] gabe@my_database=# SELECT
[more] - > '
[more] ' > name
[more] ' > '
[more] - > FROM users;

いいね。

プロンプトだけが人生じゃない

これでプロンプトはおしゃれになったが、~/.psqlrcは人生にさらなる楽しみを与えてくれる。これが私が設定しているオプションだ。

-- デフォルトでは、NULLはスペースとして表示される
-- 空白なのかnullなのか?これで違いが見えるようになる
\pset null '[NULL]'
-- デフォルトでは表形式のフォーマット(1行目がヘッダ)になるが、
-- データが多い時はより読みやすいように拡張テーブル形式で表示
\x auto
-- 詳しいエラー表示
\set VERBOSITY verbose
-- データベースごとにヒストリファイルを作る
\set HISTFILE ~/.psql_history- :DBNAME
-- 1行で複数回コマンドが実行されたら、1回だけヒストリに保存
\set HISTCONTROL ignoredups
-- キーワード(SELECTなど)を、小文字で入力し始めたとしても
-- 大文字に自動変換
\set COMP_KEYWORD_CASE upper

次は?

便利だと思ったら、これをおすすめする。

次の記事
クエリの最適化とキャッシュの有効化の利点・欠点
前の記事
MySQLで、正しいデータ型を使うことはどのくらい重要なのか?

Feed small 記事フィード

新着記事Twitterアカウント