MariaDB 「near “PARTITION” at position」が発生した場合の対処法

MariaDB 「near “PARTITION” at position」が発生した場合の対処法

MariaDBで、「near “PARTITION” at position」が発生した場合の対処法を記述してます。このエラーはPARTITION作成時に発生しました。

環境

  • OS CentOS Stream release 9
  • MariaDB 10.10.2
  • phpMyAdmin 5.2.0

エラー全文

PARTITION作成時に発生。

ALTER TABLE `sample`
PARTITION BY RANGE COLUMNS(`created_at`) (
  PARTITION  pat2020 VALUES LESS THAN ('2020-01-01 00:00:00'),
  PARTITION  pat2021 VALUES LESS THAN ('2021-01-01 00:00:00'),
  PARTITION  pat2022 VALUES LESS THAN ('2022-01-01 00:00:00'),
  PARTITION  pat2023 VALUES LESS THAN ('2023-01-01 00:00:00')
)

エラー全文

解析中に 2 個のエラーが見つかりました。

新しい ALTER 操作を開始する前にカンマがありません。 (near "PARTITION" at position 68)
認識できない alter 操作。 (near "PARTITION" at position 68)
SQL クエリ: コピー

ALTER TABLE `sample` PARTITION BY RANGE COLUMNS(`created_at`) ( PARTITION pat2020 VALUES LESS THAN ('2020-01-01 00:00:00'), PARTITION pat2021 VALUES LESS THAN ('2021-01-01 00:00:00'), PARTITION pat2022 VALUES LESS THAN ('2022-01-01 00:00:00'), PARTITION pat2023 VALUES LESS THAN ('2023-01-01 00:00:00') );

MySQL のメッセージ: ドキュメント

#1526 - Table has no partition for value from column_list

原因

PARTITIONを作成しようしたテーブルに、範囲外のデータが存在しているため。ここでいうと「2023-01-02」以上のデータがあったため

対処法

最大値を設定してあげておくから、対象の範囲までPARTITIONを作成する。

ALTER TABLE `sample`
PARTITION BY RANGE COLUMNS(`created_at`) (
  PARTITION  pat2020 VALUES LESS THAN ('2020-01-01 00:00:00'),
  PARTITION  pat2021 VALUES LESS THAN ('2021-01-01 00:00:00'),
  PARTITION  pat2022 VALUES LESS THAN ('2022-01-01 00:00:00'),
  PARTITION  pat2023 VALUES LESS THAN ('2023-01-01 00:00:00'),
  PARTITION patmax VALUES LESS THAN MAXVALUE
)