#migration #database-migrations #postgresql #mysql #sql

dbmigrate-lib

运行数据库迁移的库。支持Postgres、MySQL和Sqlite。

7个版本

使用旧的Rust 2015

0.2.0 2023年1月22日
0.1.5 2021年9月2日
0.1.4 2019年3月14日
0.1.3 2018年9月13日
0.1.0 2017年2月28日

#2637 in 数据库接口

42 每月下载量
dbmigrate 中使用

MIT/Apache

25KB
457

dbmigrate

Build Status

创建和管理SQL迁移的工具。

支持的数据库

  • Postgres
  • MySQL
  • Sqlite

使用方法

使用CLI

每次调用dbmigrate需要两个参数:数据库URL和迁移文件夹。这些可以通过环境变量设置: DBMIGRATE_URLDBMIGRATE_PATH,使用一个.env文件,或者作为调用参数。参数将覆盖环境变量。

# create a migration file
dbmigrate --url postgres://.. --path ./migrations create my_name
# apply all non applied migrations
dbmigrate --url postgres://.. --path ./migrations up
# un-apply all migrations
dbmigrate --url postgres://.. --path ./migrations down
# redo the last migration
dbmigrate --url postgres://.. --path ./migrations redo
# revert the last migration
dbmigrate --url postgres://.. --path ./migrations revert
# see list of migrations and which one is currently applied
dbmigrate --url postgres://.. --path ./migrations status

迁移文件的格式如下

0001.initial_db.up.sql
0001.initial_db.down.sql

您也可以向 create 传递一个字符串,dbmigrate 将为您进行slugify

dbmigrate --url postgres://.. --path ./migrations create "change currency table"

# gives the following files
0001.change_currency_table.up.sql
0001.change_currency_table.down.sql

. (点) 在迁移名称中不允许,因为它是指名文件分隔符。

使用库

迁移也可以通过编程方式完成,CLI工具就是这样的。

您需要将 dbmigrate-lib 依赖项添加到您的 Cargo.toml 文件中。最好的例子是查看 dbmigrate 目录,它使用它来实现CLI工具。

本地测试

首先使用 cargo build 构建项目。假设您使用Makefile中的docker镜像为pg和mysql

Postgres

./target/release/dbmigrate --url=postgres://pg@localhost:5777/migrate --path=/my/full/path/migrations status

MySQL

./target/release/dbmigrate --url=mysql://mg:pass@localhost:5789/migrate --path=/my/full/path/migrations status

对于Sqlite,我在repo中有一个名为 dbmigrate.db 的Sqlite数据库(git忽略)

./target/release/dbmigrate --path=/home/vincent/Code/dbmigrate/examples/migrations --url=sqlite:///dbmigrate.db status

使用不同的模式

dbmigrate将使用默认的模式。您可以从数据库URL中覆盖它,例如对于Postgres

--url="postgres://postgres:@127.0.0.1:5432/migrate?application_name=my_app&options=-c search_path%3Dmy_app"

变更日志

Lib

  • 0.1.5: 更新postgres依赖
  • 0.1.4: 使用 postgres-native-tls
  • 0.1.1: 添加功能,以便您可以选择需要的数据库

CLI

  • 0.3.4: 如果终端不支持颜色则不会崩溃
  • 0.3.3: 如果没有终端则不会崩溃
  • 0.3.2: 使用功能
  • 0.3.1: 重构代码以创建dbmigrate-lib并使用它为dbmigrate工具
  • 0.3.0: 添加dotenv支持 + 重构错误处理 + 更新依赖项
  • 0.2.7: 更新文档以提及sqlite支持
  • 0.2.6: 支持Sqlite
  • 0.2.5: 更新依赖项
  • 0.2.4: 不需要数据库连接来创建迁移文件并更新依赖项
  • 0.2.3: 迁移文件夹中无效文件不要慌,以及PostgreSQL的SSL支持
  • 0.2.2: 对迁移名称进行slugify处理,并检查其是否正确

致谢

这受到了https://github.com/mattes/migrate的极大启发。

许可证

许可协议如下:

任选其一。

贡献

除非你明确表示,否则根据Apache-2.0许可证定义的,你提交的旨在包含在作品中的任何贡献,都将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~6–23MB
~364K SLoC