migrate - 用 Go 编写的数据库迁移。

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

GitHub 工作流状态(分支) 戈多克 覆盖范围状态 packagecloud.io  docker 拉取 支持的 Go 版本 GitHub 发布 去成绩单

迁移

用 Go 编写的数据库迁移。用作 CLI 或作为导入。

  • 迁移 从读取迁移,并按正确的顺序将它们应用于数据库
  • 驱动程序是“愚蠢的”,迁移将所有内容粘合在一起,并确保逻辑是无懈可击的。(也保持驱动程序轻量级。
  • 数据库驱动程序不会假设事情或尝试更正用户输入。如有疑问,请失败。

遮罩/迁移分叉

数据库

数据库驱动程序运行迁移。添加新数据库?

数据库网址

数据库连接字符串通过 URL 指定。URL 格式取决于驱动程序,但通常具有以下格式:

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

任何保留的 URL 字符都需要转义。注意,字符也需要转义

%

显式地,需要对以下字符进行转义:、、

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

最简单的方法是始终通过 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
$

迁移源

源驱动程序从本地或远程源读取迁移。添加新源?

命令行界面用法

  • 围绕此库的简单包装。
  • 优雅地处理 ctrl+c (SIGINT)。
  • 没有配置搜索路径,没有配置文件,没有神奇的ENV变量注入。

命令行文档

基本用法

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

docker 使用情况

$ 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"
不使用 - 不再支持

发展与贡献

是的,请!Makefile是你的朋友,请阅读开发指南

另请查看常见问题解答


寻找替代品?https://awesome-go.com/#database