はじめに
にゃーん。趣味でポスグレをやっている者だ。
この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 10日目の記事です。
今回はパーティション親テーブルの定義時にreloptionsを指定したときのエラーメッセージの改善について書いてみます。
概要
項目 | 内容 |
---|---|
タイトル | Error for WITH options on partitioned tables |
Topic | Bug Fixes |
ステータス | commited |
Last modified | 2022-11-09 |
概要 | パーティション親テーブルに対してWITH (reloption) を指定したときのエラーメッセージの変更 |
変更内容
パーティション親テーブルに対してWITH (reloption)
を指定したときのエラーメッセージが変わります。
PostgreSQL 15
=# CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a)
=# WITH (fillfactor=100);
ERROR: unrecognized parameter "fillfactor"
filfactor
というオプション名は存在しているはずなのに、unrecognized parameter
と怒られてしまいます。
このエラーは本来は
=# CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a)
=# WITH (hoge=100);
ERROR: unrecognized parameter "hoge"
のように存在しないパラメータ名を指定したときに表示されるべきですが、PostgreSQL 15ではfillfactor
のように存在するパラメータを指定しても表示されてしまいます。
挙動としては結局はエラーになるのですが、メッセージがイケてない、というバグ報告ですね。
PostgreSQL 16
PostgreSQLではパーティション親テーブルに指定できないストレージパラメータを指定した場合には、それがわかるようなエラーメッセージに修正されました。
=# CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a)
=# WITH (fillfactor=100);
ERROR: cannot specify storage parameters for a partitioned table
HINT: Specify storage parameters for its leaf partitions, instead.
変更されたメッセージを機械翻訳すると
- ERROR: パーティション分割されたテーブルのストレージ・パラメータを指定できません。
- HINT: その代わりに、リーフパーティションに対してストレージパラメータを指定する。
という内容のメッセージを出力するようです。はい、これなら意味も合ってますね。
なお、PostgreSQL 16でストレージパラメータにhoge
を指定した場合にも、PostgreSQL 上記と同じメッセージになるようです。
=# CREATE TABLE parted_col_comment (a int, b text) PARTITION BY LIST (a)
=# WITH (hoge=100);
ERROR: cannot specify storage parameters for a partitioned table
HINT: Specify storage parameters for its leaf partitions, instead.
どうやら親テーブル作成時にWITH (reloptions)
を指定すると一律このメッセージになるようですね。
おわりに
この改修はエラーメッセージの修正ではありますが、こういう部分の改善もユーザの使い勝手という意味では大事なことですよね。
なお、PostgreSQL 15.1にはぎりぎり間に合わなかったようで、リリースノート上もこの事項は記載されていません。15.2以降に入るのかどうかも不明です。