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のような別のアクセスメソッドが組み込めるようになったら、こういう機能があると便利なのは確か。