Closed5

alembicの動作検証

norikmbnorikmb

使い方

マイグレーション

alembic revision --autogenerate -m $MIGRATE_MESSAGE

実際に動作するSQL文の発行

alembic upgrade $VERSION --sql > migration.sql
norikmbnorikmb

実際に発行されたので、ALTER TABLE時のmySQLの挙動について調べていく

ALTER TABLE hogehoge MODIFY fugafuga VARCHAR(64) NOT NULL;
norikmbnorikmb

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

このスクラップは6ヶ月前にクローズされました