12个版本 (6个重大更新)
0.9.1 | 2024年6月29日 |
---|---|
0.8.0 | 2024年2月27日 |
0.5.1 | 2023年7月18日 |
0.4.2 | 2023年3月20日 |
0.3.0 | 2022年10月22日 |
#721 在 数据库接口
用于 squill-cli
70KB
1.5K 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
命令中。
例如,默认模板可能如下所示
.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'
默认模板
默认模板
- 默认模板
- 默认模板
默认模板
默认模板
默认模板
默认模板
默认模板
默认模板
- 默认模板
- 默认模板
- 默认模板
- 默认模板
默认模板
默认模板
默认模板
默认模板
~1M SLoC