SlideShare a Scribd company logo
細かすぎて伝わらない
PostgreSQL 13 の psql 改善項目
自己紹介
● ぬこ@横浜 (@nuko_yokohama)
● にゃーん
● 趣味でポスグレをやってる者だ
今日のお題
● psql のプロンプトに関する改善
– デフォルトのプロンプトで (%x) 表示
– PROMPT2 の桁揃え
● psql メタコマンドに関する改善
– gx, g のオプション指定追加
– 演算子クラス / 演算子族の表示
– d メタコマンドの Persistence 表示
– TOAST テーブルの d 表示の改善
– e メタコマンド終了時のクエリ表示
– 標準エラー出力指定
● その他
– --help のメッセージ変更
– ファイルパスの TAB 補完改善
– 結果出力中のエラーをキャッチして報告する
(今回未検証)
PostgreSQL 13 では psql の改善もいろいろ入った
psql のプロンプトに関する改善
デフォルトのプロンプトで (%x) 表示
デフォルトのプロンプトで (%x) 表示
● PostgreSQL 12 まで
testdb=# BEGIN;
BEGIN
testdb=# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=# ROLLBACK;
ROLLBACK
testdb=#
testdb=# BEGIN;
BEGIN
testdb=*# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=*# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=!# ROLLBACK;
ROLLBACK
testdb=#
● PostgreSQL 13
デフォルトのプロンプトで (%x) 表示
● PostgreSQL 12 まで
testdb=# BEGIN;
BEGIN
testdb=# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=# ROLLBACK;
ROLLBACK
testdb=#
おわかりいただけたであろうか・・・
testdb=# BEGIN;
BEGIN
testdb=*# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=*# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=!# ROLLBACK;
ROLLBACK
testdb=#
● PostgreSQL 13
デフォルトのプロンプトで (%x) 表示
testdb=# BEGIN;
BEGIN
testdb=# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=# ROLLBACK;
ROLLBACK
testdb=#
testdb=# BEGIN;
BEGIN
testdb=*# INSERT INTO test VALUES (1, 'abc');
INSERT 0 1
testdb=*# ERROR;
ERROR: syntax error at or near "ERROR"
LINE 1: ERROR;
^
testdb=!# ROLLBACK;
ROLLBACK
testdb=#
● PostgreSQL 12 まで ● PostgreSQL 13
# の左になんかついている!
デフォルトのプロンプトで (%x) 表示
● プロンプトでトランザクション状態がわかるようになった。
トランザクションの状態 state プロンプト
トランザクション外
(セッション開始直後)
idle
#
トランザクション内 Idel in transaction
*#
トランザクション内で
異常発生時
Idle in transaction (abort)
!#
デフォルトのプロンプトで (%x) 表示
● トランザクション状態をプロンプトに展開する機能自体
は、 PostgreSQL 7.4 の頃から実装されていたりする。
● ただ、デフォルトの PROMPT1, PROMPT2 の設定が、 %x が
つかない設定値になっているため、この機能自体に気づいてい
ない人もいるかも(自分も今回、初めて知った)
● PostgreSQL 13 では、この PROMPT1, PROMPT2 のデフォル
ト値に %x が設定された。
PROMPT2 の桁揃え
PROMPT2 の桁揃え
● PostgreSQL 12 まで
testdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # SELECT 'foo
testdb'# bar
testdb'# baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
estdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # set PROMPT2 %w
にゃーんにゃーん # SELECT 'foo
bar
baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
● PostgreSQL 13
PROMPT2 の桁揃え
● PostgreSQL 12 まで
testdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # SELECT 'foo
testdb'# bar
testdb'# baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
おわかりいただけたであろうか・・・
estdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # set PROMPT2 %w
にゃーんにゃーん # SELECT 'foo
bar
baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
● PostgreSQL 13
PROMPT2 の桁揃え
● PostgreSQL 12 まで
testdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # SELECT 'foo
testdb'# bar
testdb'# baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
estdb=# set PROMPT1 ' にゃーんにゃーん # '
にゃーんにゃーん # set PROMPT2 %w
にゃーんにゃーん # SELECT 'foo
bar
baz';
?column?
----------
foo +
bar +
baz
(1 row)
にゃーんにゃーん #
● PostgreSQL 13
PROMPT2 の桁揃え
● PostgreSQL 13 からは、 PROMPT2 ( SQL 入力が継続中のプ
ロンプト)に %w を設定すると、自動的に継続行先頭の列を
PROMPT1 のところに合わせてくれるようになった。
● この形が見やすい、という人なら、 .psqlrc に
set PROMPT2 %w
を設定しておくと良いかと。
● なお、自分の環境では設定してない。
psql メタコマンドに関する改善
gx, g のオプション指定追加
gx, g のオプション指定追加
● psql を普段使ってない人にはこのメタコマンド自体が馴染みな
いかもしれないので、まずそこから説明。
● すごく雑にいうと、 psql 内で直前に実行したコマンドを再度実
行するというもの。
● g と gx の違い
– g は expanded 設定に従った結果表示をする。
– gx は必ず「拡張形式」で結果表示する。
gx, g のオプション指定追加
● g の例
testdb=# VALUES (1,'abc'),(2, NULL);
column1 | column2
---------+---------
1 | abc
2 |
(2 rows)
testdb=# g
column1 | column2
---------+---------
1 | abc
2 |
(2 rows)
testdb=# x
Expanded display is on.
testdb=# g
-[ RECORD 1 ]
column1 | 1
column2 | abc
-[ RECORD 2 ]
column1 | 2
column2 |
testdb=#
同じ操作をくり返したいときに少し便利な機能・・・
testdb=# VALUES (1,'abc'),(2, NULL);
column1 | column2
---------+---------
1 | abc
2 |
(2 rows)
testdb=# x
Expanded display is on.
testdb=# x
Expanded display is off.
testdb=# gx
-[ RECORD 1 ]
column1 | 1
column2 | abc
-[ RECORD 2 ]
column1 | 2
column2 |
testdb=#
● gx の例
gx, g のオプション指定追加
● PostgreSQL 13 では、この g, gx に (option) が指定でき
るようになった。
● でも、 option って何を指定すればいいんだ?
→たとえば、 NULL を表す特殊な文字列を指定しておくとか。
gx, g のオプション指定追加
● option 指定なしの g
testdb=# VALUES (1,' '),(2, NULL);
column1 | column2
---------+---------
1 |
2 |
(2 rows)
testdb=# g
column1 | column2
---------+---------
1 |
2 |
(2 rows)
testdb=#
最初から pset null ぬるぽ を設定しておけよ!というツッコミはなし!
testdb=# VALUES (1,' '),(2, NULL);
column1 | column2
---------+---------
1 |
2 |
(2 rows)
testdb=# g (null= ぬるぽ )
column1 | column2
---------+---------
1 |
2 | ぬるぽ
(2 rows)
testdb=#
● option 指定ありの g
空白文字なのか NULL なのか
コレガワカラナイ NULL が一目瞭然!
演算子クラス / 演算子族の表示
演算子クラス / 演算子族の表示
● PostgreSQL 12 まで
testdb=# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
db[+] [PATTERN] list tablespaces
testdb-# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
dAc[+] [AMPTRN [TYPEPTRN]] list operator classes
dAf[+] [AMPTRN [TYPEPTRN]] list operator families
dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families
dAp [AMPTRN [OPFPTRN]] list procedures of operator families
db[+] [PATTERN] list tablespaces
● PostgreSQL 13
演算子クラス / 演算子族の表示
● PostgreSQL 12 まで
testdb=# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
db[+] [PATTERN] list tablespaces
おわかりいただけたであろうか・・・
testdb-# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
dAc[+] [AMPTRN [TYPEPTRN]] list operator classes
dAf[+] [AMPTRN [TYPEPTRN]] list operator families
dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families
dAp [AMPTRN [OPFPTRN]] list procedures of operator families
db[+] [PATTERN] list tablespaces
● PostgreSQL 13
演算子クラス / 演算子族の表示
● PostgreSQL 12 まで
testdb=# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
db[+] [PATTERN] list tablespaces
なんかめっさ増えてない?
testdb-# ?
(中略)
Informational
(options: S = show system objects, + = additional detail)
d[S+] list tables, views, and sequences
d[S+] NAME describe table, view, sequence, or index
da[S] [PATTERN] list aggregates
dA[+] [PATTERN] list access methods
dAc[+] [AMPTRN [TYPEPTRN]] list operator classes
dAf[+] [AMPTRN [TYPEPTRN]] list operator families
dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families
dAp [AMPTRN [OPFPTRN]] list procedures of operator families
db[+] [PATTERN] list tablespaces
● PostgreSQL 13
演算子クラス / 演算子族の表示
● 演算子クラス / 演算子族 is 何?
● 雑に言うと、インデックス組み込みのためのなんか。
– https://www.postgresql.jp/document/12/html/xindex.html#XINDEX-OPFAMILY
● 自作の型をインデックス検索可能にしたり、全文検索用イン
デックスを使えるようにするためのなんか。
演算子クラス / 演算子族の表示
● PostgreSQL 13 で増えた psql の情報表示メタコマンド
メタコマンド 内容
dAc 演算子クラスを表示する。
dAf 演算子族を表示する。
dAo 演算族に含まれる演算子を表示する。
dAp 演算子族を実装するプロシージャを表示する。
● 引数なしだと全てのなんかをリスト表示。
● 引数を指定するとパターンマッチするものだけ表示。
演算子クラス / 演算子族の表示
● 自作データ型fractionの演算子クラス / 演算子族の表示例
testdb=# dAc btree fraction
List of operator classes
AM | Input type | Storage type | Operator class | Default?
-------+------------+--------------+----------------+----------
btree | fraction | | fraction_ops | yes
(1 row)
testdb=# dAf btree fraction
List of operator families
AM | Operator family | Applicable types
-------+-----------------+------------------
btree | fraction_ops | fraction
(1 row)
testdb=# dAo btree fraction_ops
List of operators of operator families
AM | Operator family | Operator
-------+-----------------+-------------------------
btree | fraction_ops | < (fraction, fraction)
btree | fraction_ops | <= (fraction, fraction)
btree | fraction_ops | = (fraction, fraction)
btree | fraction_ops | >= (fraction, fraction)
btree | fraction_ops | > (fraction, fraction)
(5 rows)
testdb=# dAp btree fraction_ops
List of procedures of operator families
AM | Operator family | Left arg type | Right arg type | Number | Proc name
-------+-----------------+---------------+----------------+--------+--------------
btree | fraction_ops | fraction | fraction | 1 | fraction_cmp
(1 row)
testdb=#
演算子クラス / 演算子族の表示
● こんな使い方の例もある。
● pg_bigm で全文インデックス設定するときに opclass の名前を忘れちまっ
て設定できない・・・
testdb=# CREATE INDEX data_bigm_idx ON test USING gin (data);
ERROR: data type text has no default operator class for access method "gin"
HINT: You must specify an operator class for the index or define a default operator class for the data type.
testdb=#
testdb=# dAc gin text
List of operator classes
AM | Input type | Storage type | Operator class | Default?
-----+------------+--------------+----------------+----------
gin | text | | gin_bigm_ops | no
(1 row)
testdb=# CREATE INDEX data_bigm_idx ON test USING gin (data gin_bigm_ops);
CREATE INDEX
testdb=#
● そんなときには dAc を叩いて Operator class を参照しよう。
にゃーん
d メタコマンドの Persistence 表示
d メタコマンドの Persistence 表示
● PostgreSQL 12 まで
testdb=# d+
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------+-------+----------+------------+-------------
pg_temp_3 | t_table | table | postgres | 8192 bytes |
public | l_table | table | postgres | 8192 bytes |
public | ul_table | table | postgres | 16 kB |
(3 rows)
testdb=# d+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
-----------+----------+-------+----------+-------------+------------+-------------
pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes |
public | l_table | table | postgres | permanent | 8192 bytes |
public | ul_table | table | postgres | unlogged | 16 kB |
(3 rows)
● PostgreSQL 13
d メタコマンドの Persistence 表示
● PostgreSQL 12 まで
testdb=# d+
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------+-------+----------+------------+-------------
pg_temp_3 | t_table | table | postgres | 8192 bytes |
public | l_table | table | postgres | 8192 bytes |
public | ul_table | table | postgres | 16 kB |
(3 rows)
testdb=# d+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
-----------+----------+-------+----------+-------------+------------+-------------
pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes |
public | l_table | table | postgres | permanent | 8192 bytes |
public | ul_table | table | postgres | unlogged | 16 kB |
(3 rows)
● PostgreSQL 13
おわかりいただけたであろうか・・・
testdb=# d+
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------+-------+----------+------------+-------------
pg_temp_3 | t_table | table | postgres | 8192 bytes |
public | l_table | table | postgres | 8192 bytes |
public | ul_table | table | postgres | 16 kB |
(3 rows)
testdb=# d+
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
-----------+----------+-------+----------+-------------+------------+-------------
pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes |
public | l_table | table | postgres | permanent | 8192 bytes |
public | ul_table | table | postgres | unlogged | 16 kB |
(3 rows)
d メタコマンドの Persistence 表示
● PostgreSQL 12 まで
● PostgreSQL 13
UNLOGGED TABLE かどうか d+ でわかるようになった!
d メタコマンドの Persistence 表示
● (本題じゃないけど) UNLOGGED TABLE って生成直後は 8kB じゃなくて 16kB
なんだね・・・
● PostgreSQL 12 までであっても、 d テーブル名指定で、指定したテーブルが
unlogged や temporary かどうかは見分けられたが、一覧表示のときには、それが
表示されなかった。
Persistence 列の値 意味
permanent WAL を出力する通常のテーブルを示す。
unlogged WAL を出力しない UNLOGGED テーブルを示す。
temporary 中間テーブルを示す。
TOAST テーブルの d 表示の改善
TOAST テーブルの d 表示の改善
● PostgreSQL 12 まで
testdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
estdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
Owning table: "pg_catalog.pg_database"
Indexes:
"pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global"
Tablespace: "pg_global"
● PostgreSQL 13
TOAST テーブルの d 表示の改善
● PostgreSQL 12 まで
testdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
estdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
Owning table: "pg_catalog.pg_database"
Indexes:
"pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global"
Tablespace: "pg_global"
● PostgreSQL 13
おわかりいただけたであろうか・・・
TOAST テーブルの d 表示の改善
● PostgreSQL 12 まで
testdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
estdb=# d pg_toast.pg_toast_1262
TOAST table "pg_toast.pg_toast_1262"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea
Owning table: "pg_catalog.pg_database"
Indexes:
"pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global"
Tablespace: "pg_global"
● PostgreSQL 13
pg_toast の d 表示情報がいろいろ追加された!
TOAST テーブルの d 表示の改善
● PostgreSQL 13 では TOAST テーブル (pg_toast.pg_toast*)
を d コマンドで参照するときに、以下の情報が追加された。
追加された行 内容
Owning: TOAST 元のテーブルが何か
Indexes: その TOAST テーブルのインデックス
Tablespace: どのテーブル空間に割り当てられているか
● 普段使う機能ではないだろうけど・・・。
e メタコマンド終了時のクエリ表示
e メタコマンド終了時のクエリ表示
● PostgreSQL 12 まで
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
● PostgreSQL 13
VALUES (1, ' '),
(2, NULL)
~
:x
VALUES (1, ' '),
(2, NULL)
~
:x
testdb=# e
testdb-#
testdb=# e
testdb=# VALUES (1, ' '),
(2, NULL)
testdb-#
e メタコマンド終了時のクエリ表示
● PostgreSQL 12 まで
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
● PostgreSQL 13
VALUES (1, ' '),
(2, NULL)
~
:x
VALUES (1, ' '),
(2, NULL)
~
:x
おわかりいただけたであろうか・・・
testdb=# e
testdb-#
testdb=# e
testdb=# VALUES (1, ' '),
(2, NULL)
testdb-#
e メタコマンド終了時のクエリ表示
● PostgreSQL 12 まで
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
$ psql testdb
psql (13beta1)
Type "help" for help.
testdb=# e
● PostgreSQL 13
VALUES (1, ' '),
(2, NULL)
~
:x
VALUES (1, ' '),
(2, NULL)
~
:x
testdb=# e
testdb-#
testdb=# e
testdb=# VALUES (1, ' '),
(2, NULL)
testdb-#
編集中のコマンドが e 終了時に表示されるようになった!
標準エラー出力指定
標準エラー出力指定
● PostgreSQL 12 まで
$ cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
psql:/tmp/q.txt:2: error: invalid command warn
$
cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
stderr
$
● PostgreSQL 13
標準エラー出力指定
● PostgreSQL 12 まで
$ cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
psql:/tmp/q.txt:2: error: invalid command warn
$
cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
stderr
$
● PostgreSQL 13
おわかりいただけたであろうか・・・
標準エラー出力指定
● PostgreSQL 12 まで
$ cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
psql:/tmp/q.txt:2: error: invalid command warn
$
cat /tmp/q.txt
qecho stdout
warn stderr
$ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt
$ cat /tmp/out.txt
stdout
$ cat /tmp/err.txt
stderr
$
● PostgreSQL 13
PostgreSQL 12 ではエラーになる・・・
標準エラー出力指定
● psql には任意のメッセージを出力するメタコマンドがある。
メタコマンド名 機能 サポートバージョン
qecho text [...] 任意のメッセージを標準出力に
出力する。
PostgreSQL 7.0
warn text [...] 任意のメッセージを標準エラー
出力に出力する。
PostgreSQL 13
● 標準出力への出力コマンドは遥か昔(西暦 2000 年!)からあったのに、
標準エラー出力への出力コマンドは、これまで対応していなかったらしい・・・
その他
--help のメッセージ変更
--help のメッセージ変更
● PostgreSQL 12 まで
$ ~/pgsql/pgsql-12/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
$
$ ~/pgsql/pgsql-13beta1/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
$
● PostgreSQL 13
--help のメッセージ変更
● PostgreSQL 12 まで
$ ~/pgsql/pgsql-12/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
$
$ ~/pgsql/pgsql-13beta1/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
$
● PostgreSQL 13
おわかりいただけたであろうか・・・
--help のメッセージ変更
● PostgreSQL 12 まで
$ ~/pgsql/pgsql-12/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
$
本家サイトの URL が出力されている!
$ ~/pgsql/pgsql-13beta1/bin/psql --help
psql is the PostgreSQL interactive terminal.
(中略)
Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>
$
● PostgreSQL 13
--help のメッセージ変更
● 実は他のユーティリティ (createdb, pg_basebackup, initdb
等)については、 PostgreSQL 12 でも、本家サイトの URL は
表示されていた。
● なぜか psql だけ PostgreSQL 12 までは表示されていなかった
らしい・・・。
ファイルパスの TAB 補完改善
ファイルパスの TAB 補完改善
● PostgreSQL 12 まで
testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t
● PostgreSQL 13
ここで水平タブを入力すると・・・
testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat'
ファイルパスの TAB 補完改善
● PostgreSQL 12 まで
testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t
● PostgreSQL 13
ここで水平タブを入力すると・・・
testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat'
おわかりいただけたであろうか・・・
ファイルパスの TAB 補完改善
● PostgreSQL 12 まで
testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t
● PostgreSQL 13
ここで水平タブを入力すると・・・
testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat'
消える!シングルクォート!
にゃーん
改善っていうか Bug-Fix に近いような気がする。
残る!シングルクォート!
まとめ
今日のお題(再掲)
● psql のプロンプトに関する改善
– デフォルトのプロンプトで (%x) 表示
– PROMPT2 の桁揃え
● psql メタコマンドに関する改善
– gx, g のオプション指定追加
– 演算子クラス / 演算子族の表示
– d メタコマンドの Persistence 表示
– TOAST テーブルの d 表示の改善
– e メタコマンド終了時のクエリ表示
– 標準エラー出力指定
● その他
– --help のメッセージ変更
– ファイルパスの TAB 補完改善
– 結果出力中のエラーをキャッチして報告する
(今回未検証)
PostgreSQL 13 では psql の改善もいろいろ入った
やはり
psql は
いいぞ

More Related Content

What's hot

R intro
R introR intro
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみた
Atsushi Kanehara
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
Ken Ogura
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるShintaro Fukushima
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイドShinta Hatatani
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
Makoto Kawano
 
モナドがいっぱい!
モナドがいっぱい!モナドがいっぱい!
モナドがいっぱい!
Kenta Sato
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
risou
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
Takayuki Goto
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
Kenta Hattori
 

What's hot (12)

R intro
R introR intro
R intro
 
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみた
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイド
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
 
モナドがいっぱい!
モナドがいっぱい!モナドがいっぱい!
モナドがいっぱい!
 
"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6"What Does Your Code Smell Like?"で学ぶPerl6
"What Does Your Code Smell Like?"で学ぶPerl6
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 

Similar to Pgunconf14 pg13-psql

PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
Noriyoshi Shinoda
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
Toshi Harada
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
Toshi Harada
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
Shinya Sugiyama
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
Yu Sato
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
Toshi Harada
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
Etsuji Nomura
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
SAKAUE, Tatsuya
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
yushin_hirano
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
Satoshi Yamada
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Satoshi Kitajima
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
Shinya Sugiyama
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
 

Similar to Pgunconf14 pg13-psql (20)

PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較MySQLとPostgreSQLの基本的な実行プラン比較
MySQLとPostgreSQLの基本的な実行プラン比較
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
 
20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions20190202-pgunconf-Access-Privilege-Inquiry-Functions
20190202-pgunconf-Access-Privilege-Inquiry-Functions
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 

More from Toshi Harada

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
Toshi Harada
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
Toshi Harada
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
Toshi Harada
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
Toshi Harada
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
Toshi Harada
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
Toshi Harada
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
Toshi Harada
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
Toshi Harada
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
Toshi Harada
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
Toshi Harada
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
Toshi Harada
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
Toshi Harada
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
Toshi Harada
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
Toshi Harada
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
Toshi Harada
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
Toshi Harada
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
Toshi Harada
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 

More from Toshi Harada (20)

無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Pgunconf16 toast
Pgunconf16 toastPgunconf16 toast
Pgunconf16 toast
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep20181122 pg con-jp-lt-logrep
20181122 pg con-jp-lt-logrep
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev20170819 ocd-l tthon-pgdev
20170819 ocd-l tthon-pgdev
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
Chugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pubChugoku db 20th-postgresql-10-pub
Chugoku db 20th-postgresql-10-pub
 
Pgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-jaPgconf asia-201612203-pg reversi-ja
Pgconf asia-201612203-pg reversi-ja
 
Pgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversiPgconf asia-201612203-pg reversi
Pgconf asia-201612203-pg reversi
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Chugoku db 17th-lt-kly
Chugoku db 17th-lt-klyChugoku db 17th-lt-kly
Chugoku db 17th-lt-kly
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
 
Dblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-databaseDblt#2 do-postgres-dream-of-graph-database
Dblt#2 do-postgres-dream-of-graph-database
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
 
Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6Hackers Champloo 2016 postgresql-9.6
Hackers Champloo 2016 postgresql-9.6
 

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 

Pgunconf14 pg13-psql

  • 2. 自己紹介 ● ぬこ@横浜 (@nuko_yokohama) ● にゃーん ● 趣味でポスグレをやってる者だ
  • 3. 今日のお題 ● psql のプロンプトに関する改善 – デフォルトのプロンプトで (%x) 表示 – PROMPT2 の桁揃え ● psql メタコマンドに関する改善 – gx, g のオプション指定追加 – 演算子クラス / 演算子族の表示 – d メタコマンドの Persistence 表示 – TOAST テーブルの d 表示の改善 – e メタコマンド終了時のクエリ表示 – 標準エラー出力指定 ● その他 – --help のメッセージ変更 – ファイルパスの TAB 補完改善 – 結果出力中のエラーをキャッチして報告する (今回未検証) PostgreSQL 13 では psql の改善もいろいろ入った
  • 6. デフォルトのプロンプトで (%x) 表示 ● PostgreSQL 12 まで testdb=# BEGIN; BEGIN testdb=# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=# ROLLBACK; ROLLBACK testdb=# testdb=# BEGIN; BEGIN testdb=*# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=*# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=!# ROLLBACK; ROLLBACK testdb=# ● PostgreSQL 13
  • 7. デフォルトのプロンプトで (%x) 表示 ● PostgreSQL 12 まで testdb=# BEGIN; BEGIN testdb=# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=# ROLLBACK; ROLLBACK testdb=# おわかりいただけたであろうか・・・ testdb=# BEGIN; BEGIN testdb=*# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=*# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=!# ROLLBACK; ROLLBACK testdb=# ● PostgreSQL 13
  • 8. デフォルトのプロンプトで (%x) 表示 testdb=# BEGIN; BEGIN testdb=# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=# ROLLBACK; ROLLBACK testdb=# testdb=# BEGIN; BEGIN testdb=*# INSERT INTO test VALUES (1, 'abc'); INSERT 0 1 testdb=*# ERROR; ERROR: syntax error at or near "ERROR" LINE 1: ERROR; ^ testdb=!# ROLLBACK; ROLLBACK testdb=# ● PostgreSQL 12 まで ● PostgreSQL 13 # の左になんかついている!
  • 9. デフォルトのプロンプトで (%x) 表示 ● プロンプトでトランザクション状態がわかるようになった。 トランザクションの状態 state プロンプト トランザクション外 (セッション開始直後) idle # トランザクション内 Idel in transaction *# トランザクション内で 異常発生時 Idle in transaction (abort) !#
  • 10. デフォルトのプロンプトで (%x) 表示 ● トランザクション状態をプロンプトに展開する機能自体 は、 PostgreSQL 7.4 の頃から実装されていたりする。 ● ただ、デフォルトの PROMPT1, PROMPT2 の設定が、 %x が つかない設定値になっているため、この機能自体に気づいてい ない人もいるかも(自分も今回、初めて知った) ● PostgreSQL 13 では、この PROMPT1, PROMPT2 のデフォル ト値に %x が設定された。
  • 12. PROMPT2 の桁揃え ● PostgreSQL 12 まで testdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # SELECT 'foo testdb'# bar testdb'# baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # estdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # set PROMPT2 %w にゃーんにゃーん # SELECT 'foo bar baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # ● PostgreSQL 13
  • 13. PROMPT2 の桁揃え ● PostgreSQL 12 まで testdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # SELECT 'foo testdb'# bar testdb'# baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # おわかりいただけたであろうか・・・ estdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # set PROMPT2 %w にゃーんにゃーん # SELECT 'foo bar baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # ● PostgreSQL 13
  • 14. PROMPT2 の桁揃え ● PostgreSQL 12 まで testdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # SELECT 'foo testdb'# bar testdb'# baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # estdb=# set PROMPT1 ' にゃーんにゃーん # ' にゃーんにゃーん # set PROMPT2 %w にゃーんにゃーん # SELECT 'foo bar baz'; ?column? ---------- foo + bar + baz (1 row) にゃーんにゃーん # ● PostgreSQL 13
  • 15. PROMPT2 の桁揃え ● PostgreSQL 13 からは、 PROMPT2 ( SQL 入力が継続中のプ ロンプト)に %w を設定すると、自動的に継続行先頭の列を PROMPT1 のところに合わせてくれるようになった。 ● この形が見やすい、という人なら、 .psqlrc に set PROMPT2 %w を設定しておくと良いかと。 ● なお、自分の環境では設定してない。
  • 18. gx, g のオプション指定追加 ● psql を普段使ってない人にはこのメタコマンド自体が馴染みな いかもしれないので、まずそこから説明。 ● すごく雑にいうと、 psql 内で直前に実行したコマンドを再度実 行するというもの。 ● g と gx の違い – g は expanded 設定に従った結果表示をする。 – gx は必ず「拡張形式」で結果表示する。
  • 19. gx, g のオプション指定追加 ● g の例 testdb=# VALUES (1,'abc'),(2, NULL); column1 | column2 ---------+--------- 1 | abc 2 | (2 rows) testdb=# g column1 | column2 ---------+--------- 1 | abc 2 | (2 rows) testdb=# x Expanded display is on. testdb=# g -[ RECORD 1 ] column1 | 1 column2 | abc -[ RECORD 2 ] column1 | 2 column2 | testdb=# 同じ操作をくり返したいときに少し便利な機能・・・ testdb=# VALUES (1,'abc'),(2, NULL); column1 | column2 ---------+--------- 1 | abc 2 | (2 rows) testdb=# x Expanded display is on. testdb=# x Expanded display is off. testdb=# gx -[ RECORD 1 ] column1 | 1 column2 | abc -[ RECORD 2 ] column1 | 2 column2 | testdb=# ● gx の例
  • 20. gx, g のオプション指定追加 ● PostgreSQL 13 では、この g, gx に (option) が指定でき るようになった。 ● でも、 option って何を指定すればいいんだ? →たとえば、 NULL を表す特殊な文字列を指定しておくとか。
  • 21. gx, g のオプション指定追加 ● option 指定なしの g testdb=# VALUES (1,' '),(2, NULL); column1 | column2 ---------+--------- 1 | 2 | (2 rows) testdb=# g column1 | column2 ---------+--------- 1 | 2 | (2 rows) testdb=# 最初から pset null ぬるぽ を設定しておけよ!というツッコミはなし! testdb=# VALUES (1,' '),(2, NULL); column1 | column2 ---------+--------- 1 | 2 | (2 rows) testdb=# g (null= ぬるぽ ) column1 | column2 ---------+--------- 1 | 2 | ぬるぽ (2 rows) testdb=# ● option 指定ありの g 空白文字なのか NULL なのか コレガワカラナイ NULL が一目瞭然!
  • 23. 演算子クラス / 演算子族の表示 ● PostgreSQL 12 まで testdb=# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods db[+] [PATTERN] list tablespaces testdb-# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods dAc[+] [AMPTRN [TYPEPTRN]] list operator classes dAf[+] [AMPTRN [TYPEPTRN]] list operator families dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families dAp [AMPTRN [OPFPTRN]] list procedures of operator families db[+] [PATTERN] list tablespaces ● PostgreSQL 13
  • 24. 演算子クラス / 演算子族の表示 ● PostgreSQL 12 まで testdb=# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods db[+] [PATTERN] list tablespaces おわかりいただけたであろうか・・・ testdb-# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods dAc[+] [AMPTRN [TYPEPTRN]] list operator classes dAf[+] [AMPTRN [TYPEPTRN]] list operator families dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families dAp [AMPTRN [OPFPTRN]] list procedures of operator families db[+] [PATTERN] list tablespaces ● PostgreSQL 13
  • 25. 演算子クラス / 演算子族の表示 ● PostgreSQL 12 まで testdb=# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods db[+] [PATTERN] list tablespaces なんかめっさ増えてない? testdb-# ? (中略) Informational (options: S = show system objects, + = additional detail) d[S+] list tables, views, and sequences d[S+] NAME describe table, view, sequence, or index da[S] [PATTERN] list aggregates dA[+] [PATTERN] list access methods dAc[+] [AMPTRN [TYPEPTRN]] list operator classes dAf[+] [AMPTRN [TYPEPTRN]] list operator families dAo[+] [AMPTRN [OPFPTRN]] list operators of operator families dAp [AMPTRN [OPFPTRN]] list procedures of operator families db[+] [PATTERN] list tablespaces ● PostgreSQL 13
  • 26. 演算子クラス / 演算子族の表示 ● 演算子クラス / 演算子族 is 何? ● 雑に言うと、インデックス組み込みのためのなんか。 – https://www.postgresql.jp/document/12/html/xindex.html#XINDEX-OPFAMILY ● 自作の型をインデックス検索可能にしたり、全文検索用イン デックスを使えるようにするためのなんか。
  • 27. 演算子クラス / 演算子族の表示 ● PostgreSQL 13 で増えた psql の情報表示メタコマンド メタコマンド 内容 dAc 演算子クラスを表示する。 dAf 演算子族を表示する。 dAo 演算族に含まれる演算子を表示する。 dAp 演算子族を実装するプロシージャを表示する。 ● 引数なしだと全てのなんかをリスト表示。 ● 引数を指定するとパターンマッチするものだけ表示。
  • 28. 演算子クラス / 演算子族の表示 ● 自作データ型fractionの演算子クラス / 演算子族の表示例 testdb=# dAc btree fraction List of operator classes AM | Input type | Storage type | Operator class | Default? -------+------------+--------------+----------------+---------- btree | fraction | | fraction_ops | yes (1 row) testdb=# dAf btree fraction List of operator families AM | Operator family | Applicable types -------+-----------------+------------------ btree | fraction_ops | fraction (1 row) testdb=# dAo btree fraction_ops List of operators of operator families AM | Operator family | Operator -------+-----------------+------------------------- btree | fraction_ops | < (fraction, fraction) btree | fraction_ops | <= (fraction, fraction) btree | fraction_ops | = (fraction, fraction) btree | fraction_ops | >= (fraction, fraction) btree | fraction_ops | > (fraction, fraction) (5 rows) testdb=# dAp btree fraction_ops List of procedures of operator families AM | Operator family | Left arg type | Right arg type | Number | Proc name -------+-----------------+---------------+----------------+--------+-------------- btree | fraction_ops | fraction | fraction | 1 | fraction_cmp (1 row) testdb=#
  • 29. 演算子クラス / 演算子族の表示 ● こんな使い方の例もある。 ● pg_bigm で全文インデックス設定するときに opclass の名前を忘れちまっ て設定できない・・・ testdb=# CREATE INDEX data_bigm_idx ON test USING gin (data); ERROR: data type text has no default operator class for access method "gin" HINT: You must specify an operator class for the index or define a default operator class for the data type. testdb=# testdb=# dAc gin text List of operator classes AM | Input type | Storage type | Operator class | Default? -----+------------+--------------+----------------+---------- gin | text | | gin_bigm_ops | no (1 row) testdb=# CREATE INDEX data_bigm_idx ON test USING gin (data gin_bigm_ops); CREATE INDEX testdb=# ● そんなときには dAc を叩いて Operator class を参照しよう。 にゃーん
  • 31. d メタコマンドの Persistence 表示 ● PostgreSQL 12 まで testdb=# d+ List of relations Schema | Name | Type | Owner | Size | Description -----------+----------+-------+----------+------------+------------- pg_temp_3 | t_table | table | postgres | 8192 bytes | public | l_table | table | postgres | 8192 bytes | public | ul_table | table | postgres | 16 kB | (3 rows) testdb=# d+ List of relations Schema | Name | Type | Owner | Persistence | Size | Description -----------+----------+-------+----------+-------------+------------+------------- pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes | public | l_table | table | postgres | permanent | 8192 bytes | public | ul_table | table | postgres | unlogged | 16 kB | (3 rows) ● PostgreSQL 13
  • 32. d メタコマンドの Persistence 表示 ● PostgreSQL 12 まで testdb=# d+ List of relations Schema | Name | Type | Owner | Size | Description -----------+----------+-------+----------+------------+------------- pg_temp_3 | t_table | table | postgres | 8192 bytes | public | l_table | table | postgres | 8192 bytes | public | ul_table | table | postgres | 16 kB | (3 rows) testdb=# d+ List of relations Schema | Name | Type | Owner | Persistence | Size | Description -----------+----------+-------+----------+-------------+------------+------------- pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes | public | l_table | table | postgres | permanent | 8192 bytes | public | ul_table | table | postgres | unlogged | 16 kB | (3 rows) ● PostgreSQL 13 おわかりいただけたであろうか・・・
  • 33. testdb=# d+ List of relations Schema | Name | Type | Owner | Size | Description -----------+----------+-------+----------+------------+------------- pg_temp_3 | t_table | table | postgres | 8192 bytes | public | l_table | table | postgres | 8192 bytes | public | ul_table | table | postgres | 16 kB | (3 rows) testdb=# d+ List of relations Schema | Name | Type | Owner | Persistence | Size | Description -----------+----------+-------+----------+-------------+------------+------------- pg_temp_3 | t_table | table | postgres | temporary | 8192 bytes | public | l_table | table | postgres | permanent | 8192 bytes | public | ul_table | table | postgres | unlogged | 16 kB | (3 rows) d メタコマンドの Persistence 表示 ● PostgreSQL 12 まで ● PostgreSQL 13 UNLOGGED TABLE かどうか d+ でわかるようになった!
  • 34. d メタコマンドの Persistence 表示 ● (本題じゃないけど) UNLOGGED TABLE って生成直後は 8kB じゃなくて 16kB なんだね・・・ ● PostgreSQL 12 までであっても、 d テーブル名指定で、指定したテーブルが unlogged や temporary かどうかは見分けられたが、一覧表示のときには、それが 表示されなかった。 Persistence 列の値 意味 permanent WAL を出力する通常のテーブルを示す。 unlogged WAL を出力しない UNLOGGED テーブルを示す。 temporary 中間テーブルを示す。
  • 35. TOAST テーブルの d 表示の改善
  • 36. TOAST テーブルの d 表示の改善 ● PostgreSQL 12 まで testdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea estdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea Owning table: "pg_catalog.pg_database" Indexes: "pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global" Tablespace: "pg_global" ● PostgreSQL 13
  • 37. TOAST テーブルの d 表示の改善 ● PostgreSQL 12 まで testdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea estdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea Owning table: "pg_catalog.pg_database" Indexes: "pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global" Tablespace: "pg_global" ● PostgreSQL 13 おわかりいただけたであろうか・・・
  • 38. TOAST テーブルの d 表示の改善 ● PostgreSQL 12 まで testdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea estdb=# d pg_toast.pg_toast_1262 TOAST table "pg_toast.pg_toast_1262" Column | Type ------------+--------- chunk_id | oid chunk_seq | integer chunk_data | bytea Owning table: "pg_catalog.pg_database" Indexes: "pg_toast_1262_index" PRIMARY KEY, btree (chunk_id, chunk_seq), tablespace "pg_global" Tablespace: "pg_global" ● PostgreSQL 13 pg_toast の d 表示情報がいろいろ追加された!
  • 39. TOAST テーブルの d 表示の改善 ● PostgreSQL 13 では TOAST テーブル (pg_toast.pg_toast*) を d コマンドで参照するときに、以下の情報が追加された。 追加された行 内容 Owning: TOAST 元のテーブルが何か Indexes: その TOAST テーブルのインデックス Tablespace: どのテーブル空間に割り当てられているか ● 普段使う機能ではないだろうけど・・・。
  • 41. e メタコマンド終了時のクエリ表示 ● PostgreSQL 12 まで $ psql testdb psql (13beta1) Type "help" for help. testdb=# e $ psql testdb psql (13beta1) Type "help" for help. testdb=# e ● PostgreSQL 13 VALUES (1, ' '), (2, NULL) ~ :x VALUES (1, ' '), (2, NULL) ~ :x testdb=# e testdb-# testdb=# e testdb=# VALUES (1, ' '), (2, NULL) testdb-#
  • 42. e メタコマンド終了時のクエリ表示 ● PostgreSQL 12 まで $ psql testdb psql (13beta1) Type "help" for help. testdb=# e $ psql testdb psql (13beta1) Type "help" for help. testdb=# e ● PostgreSQL 13 VALUES (1, ' '), (2, NULL) ~ :x VALUES (1, ' '), (2, NULL) ~ :x おわかりいただけたであろうか・・・ testdb=# e testdb-# testdb=# e testdb=# VALUES (1, ' '), (2, NULL) testdb-#
  • 43. e メタコマンド終了時のクエリ表示 ● PostgreSQL 12 まで $ psql testdb psql (13beta1) Type "help" for help. testdb=# e $ psql testdb psql (13beta1) Type "help" for help. testdb=# e ● PostgreSQL 13 VALUES (1, ' '), (2, NULL) ~ :x VALUES (1, ' '), (2, NULL) ~ :x testdb=# e testdb-# testdb=# e testdb=# VALUES (1, ' '), (2, NULL) testdb-# 編集中のコマンドが e 終了時に表示されるようになった!
  • 45. 標準エラー出力指定 ● PostgreSQL 12 まで $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt psql:/tmp/q.txt:2: error: invalid command warn $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt stderr $ ● PostgreSQL 13
  • 46. 標準エラー出力指定 ● PostgreSQL 12 まで $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt psql:/tmp/q.txt:2: error: invalid command warn $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt stderr $ ● PostgreSQL 13 おわかりいただけたであろうか・・・
  • 47. 標準エラー出力指定 ● PostgreSQL 12 まで $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-12/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt psql:/tmp/q.txt:2: error: invalid command warn $ cat /tmp/q.txt qecho stdout warn stderr $ ~/pgsql/pgsql-13beta1/bin/psql -f /tmp/q.txt 1> /tmp/out.txt 2> /tmp/err.txt $ cat /tmp/out.txt stdout $ cat /tmp/err.txt stderr $ ● PostgreSQL 13 PostgreSQL 12 ではエラーになる・・・
  • 48. 標準エラー出力指定 ● psql には任意のメッセージを出力するメタコマンドがある。 メタコマンド名 機能 サポートバージョン qecho text [...] 任意のメッセージを標準出力に 出力する。 PostgreSQL 7.0 warn text [...] 任意のメッセージを標準エラー 出力に出力する。 PostgreSQL 13 ● 標準出力への出力コマンドは遥か昔(西暦 2000 年!)からあったのに、 標準エラー出力への出力コマンドは、これまで対応していなかったらしい・・・
  • 51. --help のメッセージ変更 ● PostgreSQL 12 まで $ ~/pgsql/pgsql-12/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. $ $ ~/pgsql/pgsql-13beta1/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. PostgreSQL home page: <https://www.postgresql.org/> $ ● PostgreSQL 13
  • 52. --help のメッセージ変更 ● PostgreSQL 12 まで $ ~/pgsql/pgsql-12/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. $ $ ~/pgsql/pgsql-13beta1/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. PostgreSQL home page: <https://www.postgresql.org/> $ ● PostgreSQL 13 おわかりいただけたであろうか・・・
  • 53. --help のメッセージ変更 ● PostgreSQL 12 まで $ ~/pgsql/pgsql-12/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. $ 本家サイトの URL が出力されている! $ ~/pgsql/pgsql-13beta1/bin/psql --help psql is the PostgreSQL interactive terminal. (中略) Report bugs to <pgsql-bugs@lists.postgresql.org>. PostgreSQL home page: <https://www.postgresql.org/> $ ● PostgreSQL 13
  • 54. --help のメッセージ変更 ● 実は他のユーティリティ (createdb, pg_basebackup, initdb 等)については、 PostgreSQL 12 でも、本家サイトの URL は 表示されていた。 ● なぜか psql だけ PostgreSQL 12 までは表示されていなかった らしい・・・。
  • 56. ファイルパスの TAB 補完改善 ● PostgreSQL 12 まで testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t ● PostgreSQL 13 ここで水平タブを入力すると・・・ testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat'
  • 57. ファイルパスの TAB 補完改善 ● PostgreSQL 12 まで testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t ● PostgreSQL 13 ここで水平タブを入力すると・・・ testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat' おわかりいただけたであろうか・・・
  • 58. ファイルパスの TAB 補完改善 ● PostgreSQL 12 まで testdb=# COPY test FROM '/tmp/t testdb=# COPY test FROM '/tmp/t ● PostgreSQL 13 ここで水平タブを入力すると・・・ testdb=# COPY test FROM /tmp/test.dat testdb=# COPY test FROM '/tmp/test.dat' 消える!シングルクォート! にゃーん 改善っていうか Bug-Fix に近いような気がする。 残る!シングルクォート!
  • 60. 今日のお題(再掲) ● psql のプロンプトに関する改善 – デフォルトのプロンプトで (%x) 表示 – PROMPT2 の桁揃え ● psql メタコマンドに関する改善 – gx, g のオプション指定追加 – 演算子クラス / 演算子族の表示 – d メタコマンドの Persistence 表示 – TOAST テーブルの d 表示の改善 – e メタコマンド終了時のクエリ表示 – 標準エラー出力指定 ● その他 – --help のメッセージ変更 – ファイルパスの TAB 補完改善 – 結果出力中のエラーをキャッチして報告する (今回未検証) PostgreSQL 13 では psql の改善もいろいろ入った やはり psql は いいぞ