migrate README

The project's README from github.com/golang-migrate/migrate. As one markdown file: README.md.

GitHub Workflow Status (branch) GoDoc Coverage Status packagecloud.io Docker Pulls Supported Go Versions GitHub Release Go Report Card

migrate

Database migrations written in Go. Use as CLI or import as library.

Forked from mattes/migrate

Databases

Database drivers run migrations. Add a new database?

Database URLs

Database connection strings are specified via URLs. The URL format is driver dependent but generally has the form: dbdriver://username:password@host:port/dbname?param1=true&param2=false

Any reserved URL characters need to be escaped. Note, the % character also needs to be escaped

Explicitly, the following characters need to be escaped: !, #, $, %, &, ', (, ), *, +, ,, /, :, ;, =, ?, @, [, ]

It's easiest to always run the URL parts of your DB connection URL (e.g. username, password, etc) through an URL encoder. See the example Python snippets below:

$ 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
$

Migration Sources

Source drivers read migrations from local or remote sources. Add a new source?

CLI usage

CLI Documentation (includes CLI install instructions)

Basic usage

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

Docker usage

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

Use in your Go project

Go Documentation

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)
}

Want to use an existing database client?

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
}

Getting started

Go to getting started

Tutorials

(more tutorials to come)

Migration files

Each migration has an up and down migration. Why?

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

Best practices: How to write migrations.

Coming from another db migration tool?

Check out migradaptor. Note: migradaptor is not affiliated or supported by this project

Versions

Version Supported? Import Notes
master :white_check_mark: import "github.com/golang-migrate/migrate/v4" New features and bug fixes arrive here first
v4 :white_check_mark: import "github.com/golang-migrate/migrate/v4" Used for stable releases
v3 :x: import "github.com/golang-migrate/migrate" (with package manager) or import "gopkg.in/golang-migrate/migrate.v3" (not recommended) DO NOT USE - No longer supported

Development and Contributing

Yes, please! Makefile is your friend, read the development guide.

Also have a look at the FAQ.


Looking for alternatives? https://awesome-go.com/#database.

migrate (golang-migrate/migrate)

Searching Database…

这是做什么的?一个用 Go 编写的数据库迁移工具:它从源(文件、S3、GitHub 等)读取迁移脚本,并按正确顺序应用到你的数据库。既可以当命令行工具用,也可以作为 Go 库导入。
它是需要安装的工具,还是导入到 Go 代码里的库?两者都是。CLI 只是对同一个库的薄封装,而 Go 项目通过 Go modules 导入 github.com/golang-migrate/migrate/v4 —— v3/v4 的 API 已经稳定并冻结。
怎么把它跑起来?安装 CLI(安装说明见 CLI 文档)、以 Docker 容器方式运行,或通过 Go modules 导入 github.com/golang-migrate/migrate/v4。还有 PostgreSQL 和 CockroachDB 的入门指南和教程链接。
支持哪些数据库?PostgreSQL(含 PGX v4/v5)、MySQL/MariaDB、SQLite 和 SQLCipher、MS SQL Server、MongoDB、Cassandra/ScyllaDB、Neo4j、ClickHouse、CockroachDB、Google Cloud Spanner 等等 —— 还有少数驱动(如 CrateDB 和 Shell)仍标记为待完成。
连接字符串有什么要注意的坑?连接是以 URL 形式指定的(dbdriver://user:password@host:port/dbname),保留字符 —— 包括 % —— 必须转义;README 建议对连接 URL 的每一部分都做 URL 编码。
为什么 README 把数据库驱动叫做“笨”的?这些驱动刻意不做任何假设,也从不试图纠正用户的输入 —— 拿不准就直接报错。Migrate 本身负责把所有部分粘合起来并保证逻辑可靠,这也让驱动保持轻量。
能在 Docker 里运行 CLI 吗?可以 —— README 里有 Docker 用法说明,仓库里也带有 Dockerfile 以及用于构建和发布的 CI 工作流。
我正从另一个迁移工具换过来,有相关帮助吗?README 指向了 migradaptor,用于从其他数据库迁移工具切换过来,但注明该项目与本工程无隶属关系,也不受本工程支持。
What are similar projects?goose, usql, flyway, beekeeper-studio, typeorm, TablePro, orm, dbx
Size
2.4 MB
Stars
19K
Age
8y
Commits · 90 Days