migrate - データベースの移行。CLI と Golang ライブラリ。

(Database migrations. CLI and Golang library.)

Created at: 2018-01-19 17:30:58
Language: Go
License: NOASSERTION

GitHub ワークフローステータス (ブランチ) ゴードック カバレッジステータス packagecloud.io ドッカープル サポートされている Go バージョン GitHub リリース レポートカードに移動

マイグレート

Goで書かれたデータベースの移行。CLI として使用するか、ライブラリとしてインポートします

  • Migrateは、ソースから移行を読み取り正しい順序でデータベースに適用します。
  • ドライバは「愚か」であり、すべてを一緒に接着し、ロジックが防弾であることを確認します。(ドライバーの軽量性も保ちます。
  • データベース ドライバーは、想定したり、ユーザー入力を修正しようとしたりしません。疑わしいときは、失敗してください。

マットからフォーク/移行

データベース

データベース ドライバーは移行を実行します。新しいデータベースを追加しますか?

データベースの URL

データベース接続文字列は、URL で指定します。URL 形式はドライバーに依存しますが、通常は次の形式になります。

dbdriver://username:password@host:port/dbname?param1=true&param2=false

予約済みの URL 文字はすべてエスケープする必要があります。文字もエスケープする必要があることに注意してください

%

明示的には、次の文字をエスケープする必要があります: , , , ,

!
#
$
%
&
'
(
)
*
+
,
/
:
;
=
?
@
[
]

DB接続URLのURL部分(ユーザー名、パスワードなど)をURLエンコーダを介して常に実行するのが最も簡単です。以下の Python スニペットの例を参照してください。

$ python3 -c 'import urllib.parse; print(urllib.parse.quote(input("String to encode: "), ""))'
String to encode: FAKEpassword!#$%&'()*+,/:;=?@[]
FAKEpassword%21%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D
$ python2 -c 'import urllib; print urllib.quote(raw_input("String to encode: "), "")'
String to encode: FAKEpassword!#$%&'()*+,/:;=?@[]
FAKEpassword%21%23%24%25%26%27%28%29%2A%2B%2C%2F%3A%3B%3D%3F%40%5B%5D
$

移行元

ソースドライバーは、ローカルまたはリモートのソースから移行を読み取ります。新しいソースを追加しますか?

  • ファイル・システム - ファイル・システムからの読み取り
  • io/fs - Go io/fs から読み込む
  • Go-Bindata - 埋め込みバイナリデータからの読み取り (jteeuwen/go-bindata)
  • pkger - 埋め込まれたバイナリデータ(マークベイト/pkger)から読み込む)
  • GitHub - リモートの GitHub リポジトリからの読み取り
  • GitHub Enterprise - リモートの GitHub Enterprise リポジトリからの読み取り
  • ビットバケット - リモートのビットバケットリポジトリからの読み取り
  • Gitlab - リモートの Gitlab リポジトリからの読み込み
  • AWS S3 - アマゾン ウェブ サービス S3 からの読み取り
  • Google Cloud Storage - Google Cloud Platform Storage から読む

CLI の使用法

  • このライブラリの周りの単純なラッパー。
  • ctrl+c (SIGINT) を正常に処理します。
  • 設定検索パス、設定ファイル、魔法のENV varインジェクションはありません。

CLI ドキュメント

基本的な使い方

$ migrate -source file://path/to/migrations -database postgres://localhost:5432/database up 2

ドッカーの使用法

$ docker run -v {{ migration dir }}:/migrations --network host migrate/migrate
    -path=/migrations/ -database postgres://localhost:5432/database up 2

Go プロジェクトでの使用

  • API は安定しており、このリリース (v3 および v4) ではフリーズしています。
  • Go モジュールを使用して依存関係を管理します。
  • データベースの破損を防ぐために、 による正常な停止をサポートしています。
    GracefulStop chan bool
  • あなた自身のロガーを持参してください。
  • メモリのオーバーヘッドを減らすためにストリームを内部的に使用します。
    io.Reader
  • スレッドセーフで、ゴルーチンリークはありません。

ドキュメントに移動

import (
    "github.com/golang-migrate/migrate/v4"
    _ "github.com/golang-migrate/migrate/v4/database/postgres"
    _ "github.com/golang-migrate/migrate/v4/source/github"
)

func main() {
    m, err := migrate.New(
        "github://mattes:personal-access-token@mattes/migrate_test",
        "postgres://localhost:5432/database?sslmode=enable")
    m.Steps(2)
}

既存のデータベースクライアントを使用したいですか?

import (
    "database/sql"
    _ "github.com/lib/pq"
    "github.com/golang-migrate/migrate/v4"
    "github.com/golang-migrate/migrate/v4/database/postgres"
    _ "github.com/golang-migrate/migrate/v4/source/file"
)

func main() {
    db, err := sql.Open("postgres", "postgres://localhost:5432/database?sslmode=enable")
    driver, err := postgres.WithInstance(db, &postgres.Config{})
    m, err := migrate.NewWithDatabaseInstance(
        "file:///migrations",
        "postgres", driver)
    m.Up() // or m.Step(2) if you want to explicitly set the number of migrations to run
}

はじめ

はじめ

チュートリアル

(今後のチュートリアル)

移行ファイル

各移行には、上下の移行があります。なぜでしょうか。

1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sql

ベスト プラクティス: 移行の記述方法。

バージョン

バージョン サポート。 輸入 筆記
主人
import "github.com/golang-migrate/migrate/v4"
新機能とバグ修正が最初にここに到着
v4の
import "github.com/golang-migrate/migrate/v4"
安定版リリースに使用
v3の
import "github.com/golang-migrate/migrate"
(パッケージマネージャを使用)または(推奨されません)
import "gopkg.in/golang-migrate/migrate.v3"
使用しない - サポートされなくなりました

開発と貢献

はいお願いします!メイクファイルはあなたの友人です、開発ガイドを読んでください。

FAQもご覧ください。


代替案をお探しですか?https://awesome-go.com/#database