CentOS 7 の psql で tab 補完が大文字にならない件

今更だけど、人に聞かれたついでにメモ。

psql で tab を押してSQLキーワードを補完できるが、バージョンによって大文字だったり小文字だったり違いがある。

CentOS 6 / psql (PostgreSQL) 8.4.20

db=> sel
 ↓ tab
db=> SELECT 
 →SQLキーワードが大文字で補完される


CentOS 7 / psql (PostgreSQL) 9.2.15

db=> sel
 ↓ tab
db=> select
 →SQLキーワードが大文字ではなく、小文字で補完される

PostgreSQL 8.4/9.2 で何が変わったかを、ドキュメントで確認。

8.4
https://www.postgresql.jp/document/8.4/html/app-psql.html
 →COMP_KEYWORD_CASE の項目が無い

9.2
https://www.postgresql.jp/document/9.2/html/app-psql.html
 →COMP_KEYWORD_CASE の項目がある

SQLキーワードを補完する時に大文字小文字のどちらを使用するかを決定します。
lowerまたはupperが設定された場合、補完された単語はそれぞれ小文字または大文字になります。
preserve-lowerまたはpreserve-upper(デフォルト)が設定された場合、 補完された単語は入力済みの文字の大文字小文字を引き継ぎますが、何も入力されていない場合はそれぞれ小文字または大文字に補完されます。

つまり、途中まで大文字で入力されていれば、大文字で補完される。

CentOS 7 / psql (PostgreSQL) 9.2.15

db=> SEL
 ↓ tab
db=> SELECT

以前のバージョンと同じ動作(途中まで小文字でも、大文字で補完する)にしたければ、psql のパラメータで変更できる。

db=> \set COMP_KEYWORD_CASE upper

これをデフォルトにしたい場合は、~/.psqlrc へ記載する。