LoginSignup
2
0

More than 1 year has passed since last update.

PG16:Error for WITH options on partitioned tables

Last updated at Posted at 2022-12-09

はじめに

にゃーん。趣味でポスグレをやっている者だ。

この記事は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以降に入るのかどうかも不明です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0