📝

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