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

MIT/Apache

70KB
1.5K 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.sqlup.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 命令中。

例如,默认模板可能如下所示

.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