Goで記述されたデータベースの移行。 CLIとして使用するか、ライブラリとしてインポートします。
Mattes/Migrateからフォーク
データベースドライバーは移行を実行します。新しいデータベースを追加しますか?
データベース接続文字列は、URLを介して指定されています。 URL形式はドライバーに依存しますが、通常は次の形式があります: dbdriver://username:password@host:port/dbname?param1=true¶m2=false
予約されたURL文字を逃れる必要があります。注意してください、 %文字も逃げる必要があります
明示的に、次の文字を逃れる必要があります: ! 、 # 、 $ 、 % 、 & 、 ' 、 ( 、 ) 、 * 、 + , / 、 : 、 ; 、 = ? 、 @ 、 [ 、 ]
URLエンコーダを介して、DB接続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
$ソースドライバーは、ローカルまたはリモートのソースからの移行を読み取ります。新しいソースを追加しますか?
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 2GracefulStop 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.Steps(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ベストプラクティス:移行の書き方。
Migradaptorをご覧ください。注:Migradaptorはこのプロジェクトに所属またはサポートされていません
| バージョン | サポートされていますか? | 輸入 | メモ |
|---|---|---|---|
| マスター | ✅ | 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" (お勧めしません) | 使用しないでください- もはやサポートされていません |
はい、お願いします! Makefileはあなたの友達です、開発ガイドを読んでください。
FAQもご覧ください。
代替品をお探しですか? https://awesome-go.com/#database。