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

app dbmigrate

用于创建和运行数据库迁移的命令行工具。支持Postgres和MySQL。

19 个版本

使用旧的 Rust 2015

0.4.0 2023年1月22日
0.3.6 2021年9月4日
0.3.5 2017年9月29日
0.3.4 2017年6月30日
0.1.0 2015年12月19日

#2470数据库接口

MIT/Apache

43KB
698

dbmigrate

Build Status

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

支持的数据库

  • Postgres
  • MySQL
  • Sqlite

用法

使用 CLI

每次调用 dbmigrate 需要 2 个参数:数据库 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 工具就是这样构建的。

您需要在您的 Cargo.toml 文件中添加 dbmigrate-lib 依赖。最好的例子是查看 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,我在仓库中有一个名为 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: 创建迁移文件时不需要 DB 连接,并更新依赖项
  • 0.2.3: 迁移文件夹中无效文件不慌张 & 对PostgreSQL的SSL支持
  • 0.2.2: 将迁移名称slugify并检查是否正确

致谢

本系统深受https://github.com/mattes/migrate的启发。

许可证

许可方式如下

您可任选其一。

贡献

除非您明确表示,否则根据Apache-2.0许可证的定义,您有意提交的任何贡献,将被以上述方式双许可,不附加任何额外条款或条件。

依赖项

~10–27MB
~439K SLoC