# MySQLのLISTパーティションをRANGEパーティションに変更する定義文を生成するスクリプト PHPで書いてみた。 * INFORMATION_SCHEMA.PARTITIONSからデータ取得 * schema, table のようなグループ分けをどうしたら良いのか…ネストが深い。 ```php $partitionsBySchema) { foreach ($partitionsBySchema as $tableName => $partitionsByTable) { $partitionAlterQuery = "ALTER TABLE $schema.$tableName REMOVE PARTITIONING; \n" . "ALTER TABLE $schema.$tableName \n" . "PARTITION BY RANGE( {$partitionsByTable[0]['PARTITION_EXPRESSION']} ) ( \n"; foreach ($partitionsByTable as $partition) { // each partitios $partitionName = $partition['PARTITION_NAME']; $partitionOrdinalPosition = $partition['PARTITION_ORDINAL_POSITION']; $partitionComment = $partition['PARTITION_COMMENT']; // 未満を対象とするため調整 $lessThan = $partitionOrdinalPosition + 1; $partitionAlterQuery .= "PARTITION $partitionName VALUES LESS THAN ($lessThan) COMMENT = '$partitionComment' ENGINE = InnoDB, \n"; } $partitionAlterQuery .= "PARTITION pmax VALUES LESS THAN MAXVALUE); \n\n"; $partitionAlterQuerys[] = $partitionAlterQuery; } } echo implode('', $partitionAlterQuerys); ```