跳到主要内容

数据库更改

在开发新功能或重构现有功能时,有时不可避免地需要更改数据库模式。

事情可能听起来很可怕,作为用户,通常你需要:

  • 仔细检查两个或多个版本之间的差异
  • 以安全且向后兼容的方式更改数据库
  • 为潜在的失败做好准备,比如准备一个回滚脚本
  • 逐步将运行中的 Logto 实例替换为新版本

嘿,我们也是开发者,我们知道做这些风险高但又必须做的事情让人不开心。 那为什么不把它们交给不会出错的人,比如 CLI 呢?

从现在开始,你的升级过程将是:

  • 从任何可以访问数据库的地方运行 logto db alt deploy
  • 逐步将运行中的 Logto 实例替换为新版本

让我们开始吧!

确定要部署的版本

如果你全局安装了 Logto CLI,强烈建议在部署之前将 CLI 升级到最新版本,以获得完整的可用数据库更改。然后运行以下命令:

logto db alteration deploy

如果你的数据库是最新的,你将看到以下消息:

[info] Found 0 alteration to deploy

如果你有未部署的更改,CLI 将要求你选择所需的版本:

? Choose the alteration target version (Use arrow keys)
> 1.2.0
1.0.0

理论上,要部署的版本应与 Logto 实例的版本匹配。同时,你可以使用带目标版本的命令:

logto db alteration deploy 1.2.0

当你想在非 TTY 管道中进行更改时,这很有帮助,只需记得使用 --db-url 传递数据库 URL。请参阅 部署和配置 以在你的集群中设置更改任务。

备注

对于每个更改脚本,Logto CLI 将在事务中运行整个脚本。因此,如果部署失败,你可以在问题解决后使用相同的命令轻松继续。

回滚更改

我们的更改脚本还附带一个 down 脚本,可以回滚更改。要将数据库状态回滚到特定版本,请将 1.0.0 替换为你的目标版本并运行以下命令:

logto db alteration rollback 1.0.0
备注

你可以在 此目录 中找到所有更改脚本。

对于贡献者

Logto 仓库的主分支可能包含未发布的更改脚本。你可能需要通过运行以下命令手动部署“next”更改:

logto db alteration deploy next

如果你正在开发需要数据库更改的功能,除了更新数据库模式之外,你还需要提供以下格式的脚本:

next-[timestamp]-what-to-do.ts

查看 此目录 以获取参考。