2个版本
0.9.1 | 2024年6月29日 |
---|---|
0.9.0 | 2024年6月27日 |
1386 在 数据库接口
54 每月下载量
98KB
2K SLoC
Squill
Squill管理Postgresql数据库迁移。
运行迁移的工具并不少,但这款工具体现了我的特别看法
- 迁移应该使用特定数据库的SQL编写。
- 迁移通常在生产中不是幂等的或可逆的,但在开发中可逆(向下迁移)非常有用。
- 迁移依赖关系形成一个树状结构,而不是线性序列。
什么是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_url
是SQUILL_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.sql
和new.down.sql
文件。
.squill/templates
├── new.down.sql
└── new.up.sql
这些被视为用于生成相应向上和向下迁移文件的Tera模板。
Tera上下文可能如下所示
id: &i64
name: &str
命名模板
您可以通过在templates_dir
内创建子目录并在其中添加new.up.sql
和new.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版(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您提交的任何贡献,根据Apache-2.0许可证的定义,都将双重许可,如上所述,没有其他条款或条件。
加入我吧!
我欢迎任何发现使这更好的方法的人的贡献。
特别是,我重视以下这些
- 具有明确动机的拉取请求(测试也很好!)
- 带有可重现设置说明的缺陷报告
- 关于可以改进但正在工作的事情的想法
- 在问题和PR中的评论,以帮助我写出更好的文字和代码
支持
这是一个兴趣项目,所以我会根据我是否觉得有趣来决定投入多少精力。话虽如此,我发现软件维护技术很有趣,所以如果您开始依赖这个项目来做一些重要的事情,请随时开始关于稳定版v1的对话。
依赖关系
~61MB
~1M SLoC