Atlas マイグレーションコマンド (v0.29.2)
概要
Atlasはデータベースツールキットであり、データベーススキーマの管理やマイグレーションを効率的に行うための機能を提供します。特にmigrate
サブコマンドは、バージョン管理されたマイグレーションファイルを管理するための様々な機能を提供します。
migrate サブコマンド
atlas migrate
コマンドは、マイグレーション管理のための複数のサブコマンドをまとめたものです。
利用可能なサブコマンド
サブコマンド | 説明 |
---|---|
apply | 接続されたデータベースに対して保留中のマイグレーションファイルを適用します |
checkpoint | マイグレーションディレクトリの状態を表すチェックポイントファイルを生成します |
diff | マイグレーションディレクトリと目的の状態の差分を計算し、新しいマイグレーションファイルを作成します |
down | データベースから適用済みのマイグレーションファイルを元に戻します |
edit | 名前またはバージョンでマイグレーションファイルを編集し、atlas.sumファイルを更新します |
hash | マイグレーションディレクトリの整合性ハッシュを計算し、atlas.sumファイルに保存します |
import | 他のマイグレーション管理ツールからAtlas形式にマイグレーションディレクトリをインポートします |
lint | マイグレーションディレクトリに対して分析を実行します |
new | 新しい空のマイグレーションファイルを作成します |
push | マイグレーションディレクトリをAtlasレジストリにプッシュします |
rebase | 1つ以上のマイグレーションファイルを他のすべてのファイルの上に再配置し、atlas.sumファイルを更新します |
rm | マイグレーションディレクトリからマイグレーションファイルを削除します |
set | マイグレーション履歴テーブルの現在のバージョンを設定します |
status | マイグレーションの現在の状態に関する情報を取得します |
test | 指定されたディレクトリに対してマイグレーションテストを実行します |
validate | マイグレーションディレクトリのチェックサムとSQLステートメントを検証します |
共通フラグ
すべてのmigrate
サブコマンドで利用可能な共通フラグ:
フラグ | 説明 |
---|---|
-c, --config string | 設定(プロジェクト)ファイルをURL形式で選択します(デフォルト: "file://atlas.hcl") |
--env string | 設定ファイルから使用する環境を設定します |
--var <name>=<value> | 入力変数を設定します |
サブコマンドの詳細
migrate apply
接続されたデータベースのマイグレーション状態を読み取り、保留中のマイグレーションを計算します。その後、正しい順序で保留中のマイグレーションファイルをデータベースに適用します。
使用方法:
atlas migrate apply [フラグ] [適用する数]
例:
atlas migrate apply -u "mysql://user:pass@localhost:3306/dbname"
atlas migrate apply --dir "file:///path/to/migration/directory" --url "mysql://user:pass@localhost:3306/dbname" 1
atlas migrate apply --env dev 1
atlas migrate apply --dry-run --env dev 1
フラグ:
-
-u, --url string
: [driver://username:password@address/dbname?param=value] URL形式でリソースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--revisions-schema string
: リビジョンテーブルが存在するスキーマの名前 -
--dry-run
: SQLを実行せずに表示します -
--lock-timeout duration
: データベースロックの待機時間を設定します(デフォルト: 10s) -
--baseline string
: 指定されたベースラインバージョンの後から最初のマイグレーションを開始します -
--tx-mode string
: トランザクションモードを設定します [none, file, all](デフォルト: "file") -
--exec-order string
: ファイル実行順序を設定します [linear, linear-skip, non-linear](デフォルト: "linear") -
--allow-dirty
: クリーンでないデータベースでの作業開始を許可します -
-h, --help
: applyコマンドのヘルプを表示します
migrate checkpoint
開発データベースを使用してマイグレーションディレクトリの現在の状態を計算し、その状態を表すチェックポイントファイルを作成します。これにより、新しい環境が以前のファイルをバイパスし、atlas migrate apply
コマンドを実行する際に直接このチェックポイントにスキップできるようになります。
使用方法:
atlas migrate checkpoint [フラグ] [タグ]
例:
atlas migrate checkpoint --dev-url docker://mysql/8/dev
atlas migrate checkpoint --dev-url "docker://postgres/15/dev?search_path=public"
atlas migrate checkpoint --dev-url "sqlite://dev?mode=memory"
atlas migrate checkpoint --env dev --format '{{ sql . " " }}'
フラグ:
-
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-s, --schema strings
: スキーマ名を設定します -
--lock-timeout duration
: データベースロックの待機時間を設定します(デフォルト: 10s) -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--qualifier string
: 単一のスキーマで作業する場合、テーブルをカスタム修飾子で修飾します -
--edit
: 生成されたマイグレーションファイルを編集します -
-h, --help
: checkpointコマンドのヘルプを表示します
migrate diff
開発データベースを使用してマイグレーションディレクトリの現在の状態を計算し、その状態を目的の状態と比較して、現在の状態から目的の状態に移行するためのSQLステートメントを含む新しいマイグレーションファイルを作成します。
使用方法:
atlas migrate diff [フラグ] [名前]
例:
atlas migrate diff --dev-url "docker://mysql/8/dev" --to "file://schema.hcl"
atlas migrate diff --dev-url "docker://postgres/15/dev?search_path=public" --to "file://atlas.hcl" add_users_table
atlas migrate diff --dev-url "mysql://user:pass@localhost:3306/dev" --to "mysql://user:pass@localhost:3306/dbname"
atlas migrate diff --env dev --format '{{ sql . " " }}'
フラグ:
-
--to strings
: [driver://username:password@address/dbname?param=value] URL形式で目的の状態を選択します -
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-s, --schema strings
: スキーマ名を設定します -
--lock-timeout duration
: データベースロックの待機時間を設定します(デフォルト: 10s) -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--qualifier string
: 単一のスキーマで作業する場合、テーブルをカスタム修飾子で修飾します -
--edit
: 生成されたマイグレーションファイルを編集します -
-h, --help
: diffコマンドのヘルプを表示します
migrate down
データベースから適用済みのマイグレーションファイルを元に戻します。
使用方法:
atlas migrate down [フラグ] [数量]
例:
atlas migrate down -u "mysql://user:pass@localhost:3306/dbname"
atlas migrate down --env prod --to-version 20230102150405
atlas migrate down --env prod --to-tag e29be4e
フラグ:
-
-u, --url string
: [driver://username:password@address/dbname?param=value] URL形式でリソースを選択します -
--to-version string
: 元に戻す目的のバージョン -
--to-tag string
: 元に戻す目的のタグ -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--dry-run
: SQLを実行せずに表示します -
--revisions-schema string
: リビジョンテーブルが存在するスキーマの名前 -
--lock-timeout duration
: データベースロックの待機時間を設定します(デフォルト: 10s) -
-h, --help
: downコマンドのヘルプを表示します
migrate edit
名前またはバージョンでマイグレーションファイルを編集し、atlas.sumファイルを更新します。
使用方法:
atlas migrate edit [フラグ] {名前 | バージョン}
例:
atlas migrate edit 20060102150405
atlas migrate edit 20060102150405 --env dev
atlas migrate edit 20060102150405_name.sql --dir file://migrations
フラグ:
-
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: editコマンドのヘルプを表示します
migrate hash
マイグレーションディレクトリの整合性ハッシュ合計を計算し、atlas.sumファイルに保存します。このコマンドは、マイグレーションディレクトリに手動で変更を加えた場合に使用する必要があります。
使用方法:
atlas migrate hash [フラグ]
例:
atlas migrate hash
フラグ:
-
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: hashコマンドのヘルプを表示します
migrate import
他のマイグレーション管理ツールからAtlas形式にマイグレーションディレクトリをインポートします。
使用方法:
atlas migrate import [フラグ]
例:
atlas migrate import --from "file:///path/to/source/directory?format=liquibase" --to "file:///path/to/migration/directory"
フラグ:
-
--from string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--to string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: importコマンドのヘルプを表示します
migrate lint
マイグレーションディレクトリに対して分析を実行します。
使用方法:
atlas migrate lint [フラグ]
例:
atlas migrate lint --env dev
atlas migrate lint --dir "file:///path/to/migrations" --dev-url "docker://mysql/8/dev" --latest 1
atlas migrate lint --dir "file:///path/to/migrations" --dev-url "mysql://root:pass@localhost:3306" --git-base master
atlas migrate lint --dir "file:///path/to/migrations" --dev-url "mysql://root:pass@localhost:3306" --format '{{ json .Files }}'
フラグ:
-
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--latest uint
: 最新のN個のマイグレーションファイルに対して分析を実行します -
--git-base string
: ベースGitブランチに対して分析を実行します -
--git-dir string
: リポジトリの作業ディレクトリへのパス(デフォルト: ".") -
-w, --web
: ブラウザでlintレポートを開きます -
-h, --help
: lintコマンドのヘルプを表示します
migrate new
設定されたフォーマッタに従って、ステートメントのない新しいマイグレーションを作成します。
使用方法:
atlas migrate new [フラグ] [名前]
例:
atlas migrate new my-new-migration
フラグ:
-
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--edit
: 作成されたマイグレーションファイルを編集します -
-h, --help
: newコマンドのヘルプを表示します
migrate push
マイグレーションディレクトリをAtlasレジストリにプッシュします。プッシュされたディレクトリのレジストリにリポジトリが存在しない場合は、新しいリポジトリが作成されます。それ以外の場合は、ディレクトリの状態が更新されます。
使用方法:
atlas migrate push [フラグ] ディレクトリ[:タグ]
例:
atlas migrate push --dev-url docker://mysql/8/dev app
atlas migrate push --env dev app:latest
フラグ:
-
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--lock-timeout duration
: データベースロックの待機時間を設定します(デフォルト: 10s) -
--tag string
: ディレクトリをプッシュするタグ -
-h, --help
: pushコマンドのヘルプを表示します
migrate rebase
1つ以上のマイグレーションファイルを他のすべてのファイルの上に再配置し、atlas.sumファイルを更新します。
使用方法:
atlas migrate rebase [フラグ] {名前 | バージョン}...
例:
atlas migrate rebase 20060102150405
atlas migrate rebase 20060102150405 --env dev
atlas migrate rebase 20060102150405_name.sql --dir file://migrations
フラグ:
-
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: rebaseコマンドのヘルプを表示します
migrate rm
マイグレーションディレクトリからマイグレーションファイルを削除します。リモートディレクトリでは機能しません。
使用方法:
atlas migrate rm [フラグ] [数量]
例:
atlas migrate rm
atlas migrate rm --env local 20060102150405
atlas migrate rm --env local 20060102150405_name.sql
フラグ:
-
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: rmコマンドのヘルプを表示します
migrate set
リビジョンテーブルを編集して、指定されたバージョンまでのすべてのマイグレーションを適用済みと見なします。このコマンドは通常、管理対象のデータベースに手動で変更を加えた後に使用されます。
使用方法:
atlas migrate set [フラグ] [バージョン]
例:
atlas migrate set 3 --url "mysql://user:pass@localhost:3306/"
atlas migrate set --env local
atlas migrate set 1.2.4 --url "mysql://user:pass@localhost:3306/my_db" --revision-schema my_revisions
フラグ:
-
-u, --url string
: [driver://username:password@address/dbname?param=value] URL形式でリソースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--revisions-schema string
: リビジョンテーブルが存在するスキーマの名前 -
-h, --help
: setコマンドのヘルプを表示します
migrate status
接続されたデータベースとマイグレーションディレクトリを比較した現在の状態に関する情報を報告します。
使用方法:
atlas migrate status [フラグ]
例:
atlas migrate status --url "mysql://user:pass@localhost:3306/"
atlas migrate status --url "mysql://user:pass@localhost:3306/" --dir "file:///path/to/migration/directory"
フラグ:
-
-u, --url string
: [driver://username:password@address/dbname?param=value] URL形式でリソースを選択します -
--format string
: 出力のフォーマットに使用するGoテンプレート -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--revisions-schema string
: リビジョンテーブルが存在するスキーマの名前 -
-h, --help
: statusコマンドのヘルプを表示します
migrate test
指定されたディレクトリに対してマイグレーションテストを実行します。
使用方法:
atlas migrate test [フラグ] [パス]
例:
atlas migrate test --dev-url docker://mysql/8/dev --dir file://migrations .
atlas migrate test --env dev ./tests
フラグ:
-
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
--revisions-schema string
: リビジョンテーブルが存在するスキーマの名前 -
--run string
: 正規表現に一致するテストのみを実行します -
-h, --help
: testコマンドのヘルプを表示します
migrate validate
マイグレーションディレクトリの整合性ハッシュ合計を計算し、atlas.sumファイルと比較します。不一致がある場合は報告されます。--dev-url
フラグが指定されている場合、SQLセマンティクスを検証するために、マイグレーションファイルが接続されたデータベースで実行されます。
使用方法:
atlas migrate validate [フラグ]
例:
atlas migrate validate
atlas migrate validate --dir "file:///path/to/migration/directory"
atlas migrate validate --dir "file:///path/to/migration/directory" --dev-url "docker://mysql/8/dev"
atlas migrate validate --env dev --dev-url "docker://postgres/15/dev?search_path=public"
フラグ:
-
--dev-url string
: [driver://username:password@address/dbname?param=value] URL形式で開発データベースを選択します -
--dir string
: URL形式でマイグレーションディレクトリを選択します(デフォルト: "file://migrations") -
--dir-format string
: マイグレーションファイル形式を選択します(デフォルト: "atlas") -
-h, --help
: validateコマンドのヘルプを表示します
Discussion