Commitfest 2020-09 - psql関連
はじめに
先週にPostgreSQL 13.0リリースされたってこともあるけど、久々にCommitfestを見てみようと思った。 commitfest.postgresql.org とりあえず、自分にとって興味のあるpsqlについて、まず見てみようかと。
psql関連の項目
とりあえず"psql"でCommitfestページ内を引っ掛けると、以下の8項目があった。
- psql - add SHOW_ALL_RESULTS option
- psql - possibility to specify where status row should be displayed
- allow to set a pager for psql's watch command
- Confusing list foreign table options in psql - Fixing slash usage text
- list of extended statistics on psql
- document that psql's FETCH_COUNT does not work with combined (\;) queries
- psql: add \si, \sm, \st and \sr functions to show CREATE commands for indexes, matviews, triggers and tables
- psql: Include access method in listTables output
とりあえず、議論の発端となったメールの概要くらいは見ておこう。
psql - add SHOW_ALL_RESULTS option
これはざっくりいうと、連結されたクエリの最後のクエリだけでなく、途中のクエリの結果も表示する、というものらしい。 現在は、連結したクエリをpsqlで実行すると、最後のクエリの結果のみが表示される。
psql - possibility to specify where status row should be displayed
\h 出力のようにコマンドタグを毎回stdoutにリダイレクトできないか、という提案なんだろうか。 で、この提案機能の使い途って何?という質疑が続く。
このパッチの作成者のPavel Stehuleさんが言うには(ML投稿の雑翻訳) 、
このパッチの主な動機は、クエリを記述および編集するためにpsqlを使用し、pspgまたは他の同様のツール(tail, ...)を使用して結果を2番目のターミナルで参照することです。 この設定の利点は、SQLとクエリの結果を一緒に表示できることです。
ということらしい。pspgってツールは知らなかったので、ちょっと調べてみた。 github.com
pspgというのは、どうやらページャのようだ。psql変数PAGERにpspgというのを指定すると使えるようだ。ヘッダ行を固定したままスクロールとかできるようなので、ちょっと便利そう。
allow to set a pager for psql's watch command
\watch
メタコマンド専用のぺージャを設定する、psql環境変数PSQL_WATCH_PAGER
の提案っぽい。
提案者は一つ上の項目と同じPavel Stehuleさん。
Confusing list foreign table options in psql - Fixing slash usage text
psqlの外部表に関するメタコマンド
\dE[S+] [PATTERN] list foreign tables \det[+] [PATTERN] list foreign tables
の説明が同じで混乱するから改善したいという話かな?詳細は追ってない。
list of extended statistics on psql
拡張統計情報に関するリストを表示するメタコマンドdz
の提案かな?
document that psql's FETCH_COUNT does not work with combined (\;) queries
連結されたクエリ(DECLARE ... <first select>; <second select>
)の挙動(2番目がSELECTでない場合、1番目のSELECTの内容がカーソル定義として適用されるけど、それに関する文書の説明の改善提案なのかな。詳細は追ってない。
psql: add \si, \sm, \st and \sr functions to show CREATE commands for indexes, matviews, triggers and tables
psqlに新しいメタコマンドを追加して、インデックス、マテリアライズド・ビュー、トリガ、テーブルのCREATE文を表示させようという提案かな。 今でも、ビューについては、
pgbench=# \d+ accounts_v View "public.accounts_v" Column | Type | Collation | Nullable | Default | Storage | Description ----------+---------------+-----------+----------+---------+----------+------------- aid | integer | | | | plain | bid | integer | | | | plain | abalance | integer | | | | plain | filler | character(84) | | | | extended | View definition: SELECT pgbench_accounts.aid, pgbench_accounts.bid, pgbench_accounts.abalance, pgbench_accounts.filler FROM pgbench_accounts;
みたいな定義を表示するので、それと同じようなことがやりたいのかな?
psql: Include access method in listTables output
これは、テーブル一覧を表示する\dメタコマンドの詳細モード(\d+)を引数なしで実行したときに、各テーブルのアクセスメソッドを表示するもの。これは既にcommitされているので、最新のソースを入手すると挙動が確認できる。
$ ~/pgsql/master/bin/psql -p 10014 pgbench psql (14devel) Type "help" for help. pgbench=# \d List of relations Schema | Name | Type | Owner --------+------------------+-------+---------- public | pgbench_accounts | table | postgres public | pgbench_branches | table | postgres public | pgbench_history | table | postgres public | pgbench_tellers | table | postgres (4 rows) pgbench=# \d+ List of relations Schema | Name | Type | Owner | Persistence | Access Method | Size | Description --------+------------------+-------+----------+-------------+---------------+---------+------------- public | pgbench_accounts | table | postgres | permanent | heap | 13 MB | public | pgbench_branches | table | postgres | permanent | heap | 40 kB | public | pgbench_history | table | postgres | permanent | heap | 0 bytes | public | pgbench_tellers | table | postgres | permanent | heap | 40 kB | (4 rows)
現状は、コア機能にはheapアクセスメソッドしかないけど、zheapやZedstoreのような別のアクセスメソッドが組み込めるようになったら、こういう機能があると便利なのは確か。