6 个版本
0.2.3 | 2023年7月4日 |
---|---|
0.2.2 | 2023年3月29日 |
0.1.1 | 2023年2月28日 |
0.1.0 | 2022年11月19日 |
#1630 在 数据库接口
30 每月下载次数
46KB
880 行
Salmo
数据库迁移系统。
目前它还没有概念验证阶段。它可以用于实验,但我建议在投入生产之前再等一等。
动机
每个人以及他们的母亲都写过数据库迁移系统。一个简单的系统并不难。然而,它们往往有两个问题之一:要么它们没有好的开发故事(它们是不可变的,仅用于生产部署),要么有好的开发故事,但在生产中有许多可能导致问题的陷阱。Salmo 旨在专门在本地开发中使用,然后将本地更改提交为不可变形式以进行生产部署。
目前它仅针对 postgres,但如果它在那里成功,就没有理由其他数据库不能得到支持。它可以与任何框架一起使用,并且旨在在各种环境中轻松安装和使用。
迁移格式
salmo 将搜索一个包含 Salmo.toml 文件的目录,用作所有命令的基础。此 Salmo 文件包含多个配置值,包括迁移所在的目录。
默认的文件结构是
dir/
Salmo.toml
migrations/
committed.toml
create-users/
migrate.sql
revert.sql
用法
salmo init
:在当前目录中创建 Salmo.toml,如果不存在
salmo new [migration-id]
:创建一个具有给定 id 的新迁移目录
salmo migrate
:执行所有挂起的(已提交但未执行的)迁移针对当前数据库
salmo status
:将显示哪些迁移处于什么状态。状态是
- 未提交:此迁移处于开发中,不会在
salmo migrate
中执行。 - 尝试:此迁移未提交,但正在本地使用
salmo try
进行测试 - 挂起:此迁移已提交,但尚未针对当前数据库执行。
- 完成:此迁移已提交并执行。
默认情况下,仅显示未提交或挂起的迁移。
salmo commit [migration-id]
:提交迁移。将计算迁移的哈希值,因此不能再更改。可以省略迁移 ID,如果只有一个未提交的迁移存在
salmo try [migration-id]
:执行一个未提交的迁移。如果只有一个未提交的迁移存在,则将执行它。
salmo retry [迁移-id]
:回滚并重新执行已尝试的迁移
salmo untry [迁移-id]
:回滚已尝试的迁移
salmo reset
:回滚所有已尝试的迁移
关于环境说明
Salmo需要(可能多个)环境配置(尽管它可以将实际连接参数延迟到环境变量)。每个环境都有一个is_production
标志。如果环境是生产环境,那么salmo将不会执行salmo try
或salmo reset
(因为重置特别危险,因为salmo将撤销执行模式更改)。
配置salmo
Salmo通过Salmo.toml文件进行配置。
migrations_directory: [可选] 包含迁移文件的目录 envrionments: [必需] 包含不同环境的连接参数 environments.name: [必需] 环境名称。这必须在所有环境中是唯一的 environments.connection_params: [可选] 连接参数表。每个都可以是字符串或表形式 {env: 'ENV_VAR_NAME'} environments.connection_url: [可选] 连接到数据库的字符串URL。它可以是字符串或表形式 {env: 'ENV_VAR_NAME'} environments.is_production: 布尔值,如果环境被认为是生产环境 default_environments: [可选] 激活环境名称数组。如果没有指定其他环境,这些环境将是激活的。
可以通过参数 --environments(或 -e)或环境变量 SALMO_ENV
设置活动环境。如果多个环境处于活动状态,命令将在每个环境中执行。这使得保持开发和测试数据库同步变得容易。
committed.toml
Committed.toml不需要手动编辑,但如有需要可以进行检查。它列出了迁移的执行顺序及其哈希。
推荐的工作流程
- 使用
salmo new
创建迁移 - 编辑新创建的文件
- 使用
salmo try
尝试执行迁移 - 如果迁移失败,修复它并再次使用
salmo try
- 开发使用迁移的代码
- 可能发现迁移中缺少某些内容,或者可以改进。在这种情况下,执行
salmo reset
,编辑迁移并再次使用salmo try
- 可能进行代码审查
- 可能在预发布环境中测试
- 当整个功能准备就绪可以部署时,运行
salmo commit
- 当新功能部署时,运行
salmo migrate
以运行迁移。
依赖关系
~5–15MB
~189K SLoC