Closed5
alembicの動作検証
Alembicとは
- DBのマイグレーションスクリプトを自動で生成してくれるPythonのツール
- PythonのORMであるsqlalchemyと相性が良い
使い方
マイグレーション
alembic revision --autogenerate -m $MIGRATE_MESSAGE
実際に動作するSQL文の発行
alembic upgrade $VERSION --sql > migration.sql
実際に発行されたので、ALTER TABLE時のmySQLの挙動について調べていく
ALTER TABLE hogehoge MODIFY fugafuga VARCHAR(64) NOT NULL;
alembicは生成時に特にオプションが付かない、つまりデフォルトのものが利用されるはず
気にする必要がありそうなオプションとしては以下
ALGORITHM
-
COPY: 操作は元のテーブルのコピーに対して実行され、テーブル データは元のテーブルから新しいテーブルに行ごとにコピーされます。同時 DML は許可されません。
-
INPLACE: 操作ではテーブル データのコピーは回避されますが、テーブルを適切な場所に再構築する可能性があります。テーブルに対する排他的メタデータ ロックは、操作の準備フェーズおよび実行フェーズ中に短時間取得される場合があります。通常、同時 DML がサポートされます
LOCK(同時実行制御)
- DEFAULT: 指定された句 (存在する場合) と 操作の同時実行 の最大レベルサポートされている場合、同時読み取りと書き込みを許可します。そうでない場合、サポートされていれば同時読み取りを許可します。そうでない場合は、排他的アクセスを強制します。
- NONE: サポートされている場合は、同時読み取りと書き込みを許可します。それ以外の場合はエラーが発生します。
- SHARED: サポートされている場合、同時読み取りは許可されますが、書き込みはブロックされます。ALGORITHM 指定された句 (存在する場合) およびALTER TABLE操作のストレージ エンジンによって同時書き込みがサポートされている場合でも、書き込みはブロックされます。同時読み取りがサポートされていない場合、エラーが発生します。
- EXCLUSIVE: 排他的アクセスを強制します。ALGORITHMこれは、指定された句 (存在する場合) および ALTER TABLE操作の ストレージ エンジンによって同時読み取り/書き込みがサポートされている場合でも行われます 。
引用元: https://dev.mysql.com/doc/refman/5.7/en/alter-table.html
MySQL 5.xでALGORITHMを指定せずにADD COLUMNをした場合は大抵の場合は inplace になる
引用元: https://matsu-chara.hatenablog.com/entry/2021/11/28/222221
このスクラップは2023/11/09にクローズされました