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 每月下载次数

ISC 许可证

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 trysalmo 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