結論
add_column
の after:
オプションを指定し、カラム位置の調整を行います。
(MySQLのAFTER 句を使用してカラムの追加位置の指定が行われます。)
- 以下の add_column を行うと指定のテーブルの既存カラム名の後ろにカラムを追加できます。
add_column :<指定のテーブル名>, :<追加するカラム名>, :<追加する型情報>, after: :<既存カラム名>
カラム追加時に実行される位置調整に関するロジックは以下のリンク先に記載があります。
add_column_position!
after:
オプションはすべてのRDBMSで利用できるわけではありません。
主にMySQLでサポートされていますが、PostgreSQLなどの主要なRDBMSでは使用出来ない場合が多いため、ご注意ください。
はじまり
とあるプロジェクトで テーブルにカラムB(colume_b
)の追加依頼がありました。
カラムの位置については カラムA(colume_a
) の後ろに追加して欲しいという要望がありました。
修正前の状態を確認する
テーブル構造確認
カラムA(colume_a
)が存在することが確認できます。
mysql> DESC tbl_samples;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| column_a | varchar(255) | YES | | NULL | |
| created_at | datetime(6) | NO | | NULL | |
| updated_at | datetime(6) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
修正作業
マイグレーションファイルの作成と実行
マイグレーションファイルを作成し、マイグレーションファイルを実行する。
- カラムA(
colume_a
) の後ろにカラムB(colume_b
)を 追加するマイグレーション
class AddColumnBToTblSamples < ActiveRecord::Migration[6.1]
def change
add_column :tbl_samples, :column_b, :string, after: :column_a
end
end
修正後の状態を確認する
テーブル構造確認
想定通り、 カラムA(colume_a
) の後ろに カラムB(colume_b
) を追加されていることが確認できました。
mysql> DESC tbl_samples;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| column_a | varchar(255) | YES | | NULL | |
| column_b | varchar(255) | YES | | NULL | |
| created_at | datetime(6) | NO | | NULL | |
| updated_at | datetime(6) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
最後に
add_column
の after:
オプションを指定することで任意の位置にカラムの追加が簡単に行えました。
主にMySQLでサポートされているので、SQLでデータを確認するときのカラムの表示順を見やすい順に変えたい等必要な時に使ってみてください!