Skip to main content
© 2022 NTT DATA Corporation
世の中のPostgreSQLエンジニアのpsql設定
2022年7月29日 第34回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部
加藤 慎也
© 2022 NTT DATA Corporation 2
自己紹介
• 名前
• 加藤 慎也 @ShinyaKato_
• 所属
• 株式会社NTTデータ 技術開発本部
• 業務
• PostgreSQLの研究開発やサポート業務に従事
• これまでのPostgreSQLアンカンファレンス
• 第20回
• PostgreSQL初心者がパッチを提案してからコミットされるまで
• 第25回
• VSCodeで作るPostgreSQL開発環境
• 第27回
• PostgreSQLのCREATEROLE権限強すぎ問題
• 第33回
• フックを使ったPostgreSQLの拡張機能を作ってみよう!
© 2022 NTT DATA Corporation 3
本講演について
• 講演資料
• NTTデータのSlideShareアカウントで公開予定(https://www.slideshare.net/nttdata-tech)
• 参考ページ
• https://zenn.dev/shinyakato/articles/543dae5d2825ee
• 調査環境
• PostgreSQL 15 Beta 1
© 2022 NTT DATA Corporation 4
やりたかったこと
• これのpsql版を作りたい
https://qiita.com/reireias/items/d906ab086c3bc4c22147
© 2022 NTT DATA Corporation 5
やったこと
• GitHubから「psqlrc」を含むファイルを取得
• 取得した2,005個のファイルの中身をPostgreSQLに挿入して、
よく用いられる設定のランキングを作成
© 2022 NTT DATA Corporation 6
psqlrc
• psqlの設定ファイルであり、以下の特徴をもつ
• システム全体の設定を行うpsqlrcファイルは、PostgreSQLの実行ファイルを含むディレクトリからの相対パス
で../etc/に格納します。このディレクトリは環境変数PGSYSCONFDIRを使って明示的に設定することがで
きます。
• ユーザ固有の設定を行う.psqlrcファイルは、実行しているユーザのホームディレクトリに格納します。このファイ
ルは環境変数PSQLRCで明示的に設定することができます。
• これらのファイルは.psqlrc-14のようにバージョンを指定することで、特定のバージョンのpsql向けのファイルとす
ることができます。
• 詳しくはドキュメントやPostgreSQL Wikiを参考にしてください。
https://www.postgresql.jp/document/13/html/app-psql.html
© 2022 NTT DATA Corporation 7
このようなテーブルに対して
CREATE TABLE psqlrc (
id INT,
line_num INT,
statement TEXT,
PRIMARY KEY (id, line_num)
);
SELECT * FROM psqlrc WHERE id = 1;
id | line_num | statement
----+----------+-----------------------------
1 | 1 | set QUIET 1
1 | 2 | x auto
1 | 3 | set VERBOSITY verbose
1 | 4 | set HISTCONTROL ignoredups
1 | 5 | unset QUIET
(5 rows)
© 2022 NTT DATA Corporation 8
このSQLを実行してstatementをスペースで区切ったときの第1項の出現回数のランキングを取得
SELECT
lower(split_part(statement, ' ', 1)) AS command,
COUNT(statement) AS count
FROM psqlrc
GROUP BY command
HAVING
left(lower(split_part(statement, ' ', 1)), 2) != '--'
ORDER BY count DESC
LIMIT 10;
command | count
-----------+------
-
set | 8929
pset | 2565
echo | 1076
x | 1018
timing | 995
unset | 565
setenv | 273
r | 207
set | 132
encoding | 123
(10 rows)
© 2022 NTT DATA Corporation 9
コマンドの書式と説明
ランク コマンド 書式 説明
1 set set [ name [ value [ ... ] ] ] psql変数nameをvalueに設定する
2 pset pset [ option [ value ] ] 問い合わせ結果のテーブル出力に影響するオプションを設定
3 echo echo text [ ... ] 引数を空白で区切り、標準出力に出力し、改行
4 x x [ on | off | auto ] 拡張テーブル形式モードを設定またはトグル
5 timing timing [ on | off ]
SQL文にかかる時間の表示の有無をonまたはoffに設定(パラメータの指定がない
場合、表示をonとoffの間で切り替え)
6 unset unset name psql変数nameを削除
7 setenv setenv name [ value ] 環境変数nameをvalueに設定
8 r r (reset) 問い合わせバッファをリセット(クリア)
9 SET (SQLコマンド) 省略 実行時パラメータを変更する
10 encoding encoding [ encoding ]
クライアント側の文字セット符号化方式を設定(引数を指定しない場合、現在の
符号化方式を表示)
© 2022 NTT DATA Corporation 10
set
• set PROMPT1
• PROMPT1は、psqlが新しいコマンドを受け付ける際に発行される通常のプロンプトを設定できる
• よく使われる設定は以下
• rockyユーザ(スーパーユーザ)、postgresデータベースにUnixドメインソケットで接続している場合
PROMPT1 表示内容
%/%R%x%# (デフォルト) postgres=# (デフォルト)
%[%033[1m%]%M
%n@%/%R%[%033[0m%]%#
[local] rocky@postgres=#
%[%033[1m%][%/] # [postgres] #
%[%033[33;1m%]%x%[%033[0m%]%[%033[1m
%]%/%[%033[0m%]%R%#
postgres=#
(%n@%M:%>) [%/] > (rocky@[local]:5432) [postgres] >
%[%033[1m%]%M/%/%R%[%033[0m%]%# [local]/postgres=#
© 2022 NTT DATA Corporation 11
set
• set COMP_KEYWORD_CASE upper
• 変数COMP_KEYWORD_CASEはSQLのタブ補完を行うときに大文字を使うか小文字を使うかを設定
• upperを指定することで、常に大文字を使用する人が多い
• set HISTCONTROL ignoredups
• 変数HISTCONTROLでコマンドの履歴リストの設定
• ignoredupsを指定することで、直前の履歴と同じ行は履歴リストに入らないようにする人が多い
• set VERBOSITY verbose
• 変数VERBOSITYでエラー報告の冗長性を制御することが可能
• verboseを指定することで、エラーの詳細を表示するようにしている人が多い
© 2022 NTT DATA Corporation 12
pset
• pset null '[NULL]’
• null値の代わりに表示する文字列を設定し、null値を見やすくしている人が多い
• pset linestyle Unicode
• 境界線の表示形式をUnicodeにしている人が多い(デフォルトはASCII)
ASCII Unicode
© 2022 NTT DATA Corporation 13
pset
• pset border
• 表示するテーブルが持つ境界線を変更している人が多い
border=0 border=1 border=2
© 2022 NTT DATA Corporation 14
pset
• pset pager
• pset pager offでページャをオフにしたり、
pset pager alwaysで常にページャを使用する設定にしている人が多い
© 2022 NTT DATA Corporation 15
x
• x auto
• 行の幅によって自動的に拡張テーブル形式モードにするかどうかを設定している人が多い
© 2022 NTT DATA Corporation 16
timing
• timing / timing on
• SQL文の実行時間を表示している人が多い
© 2022 NTT DATA Corporation 17
setenv
• setenv PAGER less / pspg
• 環境変数PAGERやPSQL_PAGERを設定することでページャにlessやpspgを使用している人が多い
• pspgはテーブル表示に特化したページャ
© 2022 NTT DATA Corporation 18
SET
• SET search_path TO hoge
• スキーマ検索パスを独自のものに設定している人が多い
• SET intervalstyle TO 'postgres_verbose’
• 時間間隔の出力をpostgres_verbose書式の出力にしている人が多い
© 2022 NTT DATA Corporation 19
まとめ
• よく用いられるpsqlの設定について調査しました
• よいpsqlライフを!
© 2022 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。