#database-migrations #postgresql #migration #sql #tree-structure #down #squill

app squill-cli

PostgreSQL数据库迁移的命令行工具

2个版本

0.9.1 2024年6月29日
0.9.0 2024年6月27日

1386数据库接口

Download history 210/week @ 2024-06-23 207/week @ 2024-06-30 1/week @ 2024-07-07

54 每月下载量

MIT/Apache

98KB
2K SLoC

Squill

Squill管理Postgresql数据库迁移。

运行迁移的工具并不少,但这款工具体现了我的特别看法

  1. 迁移应该使用特定数据库的SQL编写。
  2. 迁移通常在生产中不是幂等的或可逆的,但在开发中可逆(向下迁移)非常有用。
  3. 迁移依赖关系形成一个树状结构,而不是线性序列。

什么是squill?

它是植物的一个亚科的俗称,看起来相当酷。

但更重要的是,它是一个包含“s”、“q”和“l”字母的单词,易于输入和发音,而且还不是别人的crate名称 😉

安装

要安装Squill作为命令,使用cargo install

cargo install squill-cli

或从GitHub发行版下载预构建包。

要使用Squill作为库,使用cargo add

cargo add squill

用法

运行squill --help以从每个子命令获取用法信息。

首次设置

编写配置文件(squill.toml)或设置等效的环境变量。环境变量优先于文件。

环境变量是具有SQUILL_前缀的文件中变量的大写版本。例如,database_urlSQUILL_DATABASE_URL

# The connection string for the database to run migrations on.
#
# You might prefer to set this using an environment variable.
#
# Default: "" (default PostgreSQL server)
database_url = ""

# The directory used to store migration files.
#
# Default: "migrations"
migrations_dir = "migrations"

# The template to use for new migration files.
#
# Default: (unset) (use the embedded default migration templates)
templates_dir = ".squill/templates"

然后,生成第一个设置Squill要求的迁移

squill init

它应该在您的迁移目录中写入0-init/{up,down}.sql。阅读这些文件并根据需要做出更改。

最后,运行向上迁移

squill migrate

编写新的迁移

创建一个新的空迁移文件

squill new --name 'create_users_table'

(您可以使用--id 123覆盖自动ID生成)。

在文件中编写您的迁移,然后运行它

squill migrate

撤销迁移

对于已在生产环境(或某些其他共享环境)中运行过的迁移,最佳选择是编写一个新的迁移来撤销旧的迁移。

在开发环境中,撤销最近运行的迁移(按应用顺序,而不是按ID顺序)。

squill undo

编辑向上迁移,然后像平常一样使用squill migrate来运行它。

为了使这个过程更容易,squill redo会运行最近运行的迁移的down.sql文件,然后运行up.sql文件。

重新编号迁移

您可能有一个包含不同ID长度的迁移混合,这可能导致目录列表出现顺序混乱。使用align-ids子命令对较短的ID进行零填充。

squill align-ids

该命令默认为预览。要实际执行所有建议的重命名,请添加--execute

自定义迁移模板

您可以通过设置templates_dir路径来自定义squill new生成的文件。Squill将使用该目录中的new.up.sqlnew.down.sql文件。

.squill/templates
├── new.down.sql
└── new.up.sql

这些被视为用于生成相应向上和向下迁移文件的Tera模板。

Tera上下文可能如下所示

id: &i64
name: &str

命名模板

您可以通过在templates_dir内创建子目录并在其中添加new.up.sqlnew.down.sql来保留命名迁移模板。

要使用命名模板,请将--template参数添加到squill new命令中。否则将使用templates_dir内的默认(未命名)模板。

例如,如果您想确保create table迁移遵循特定约定,您的templates_dir可能如下所示

.squill/templates
├── create_table
│   ├── new.down.sql
│   └── new.up.sql
├── new.down.sql
└── new.up.sql

这是生成使用它的新迁移的命令

squill new --template 'create_table' --name 'create_users_table'

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则您提交的任何贡献,根据Apache-2.0许可证的定义,都将双重许可,如上所述,没有其他条款或条件。

加入我吧!

我欢迎任何发现使这更好的方法的人的贡献。

特别是,我重视以下这些

  • 具有明确动机的拉取请求(测试也很好!)
  • 带有可重现设置说明的缺陷报告
  • 关于可以改进但正在工作的事情的想法
  • 在问题和PR中的评论,以帮助我写出更好的文字和代码

支持

这是一个兴趣项目,所以我会根据我是否觉得有趣来决定投入多少精力。话虽如此,我发现软件维护技术很有趣,所以如果您开始依赖这个项目来做一些重要的事情,请随时开始关于稳定版v1的对话。

依赖关系

~61MB
~1M SLoC