数据库更改
在开发新功能或重构现有功能时,有时不可避免地需要更改数据库模式。
事情可能听起来很可怕,作为用户,通常你需要:
- 仔细检查两个或多个版本之间的差异
- 以安全且向后兼容的方式更改数据库
- 为潜在 的失败做好准备,比如准备一个回滚脚本
- 逐步将运行中的 Logto 实例替换为新版本
嘿,我们也是开发者,我们知道做这些风险高但又必须做的事情让人不开心。 那为什么不把它们交给不会出错的人,比如 CLI 呢?
从现在开始,你的升级过程将是:
- 从任何可以访问数据库的地方运行
logto db alt deploy
- 逐步将运行中的 Logto 实例替换为新版本
让我们开始吧!
确定要部署的版本
如果你全局安装了 Logto CLI,强烈建议在部署之前将 CLI 升级到最新版本,以获得完整的可用数据库更改。然后运行以下命令:
- CLI
- npx
logto db alteration deploy
npx @logto/cli 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 实例的版本匹配。同时,你可以使用带目标版本的命令:
- CLI
- npx
logto db alteration deploy 1.2.0
npx @logto/cli db alteration deploy 1.2.0
当你想在非 TTY 管道中进行更改时,这很有帮助,只需记得使用 --db-url
传递数据库 URL。请参阅 部署和配置 以在你的集群中设置更改任务。
备注
对于每个更改脚本,Logto CLI 将在事务中运行整个脚本。因此,如果部署失败,你可以在问题解决后使用相同的命令轻松继续。
回滚更改
我们的更改脚本还附带一个 down
脚本,可以回滚更改。要将数据库状态回滚到特定版本,请将 1.0.0
替换为你的目标版本并运行以下命令:
- CLI
- npx
logto db alteration rollback 1.0.0
npx @logto/cli db alteration rollback 1.0.0
备注
你可以在 此目录 中找到所有更改脚本。
对于贡献者
Logto 仓库的主分支可能包含未发布的更改脚本。你可能需要通过运行以下命令手动部署“next”更改:
- CLI
- npx
logto db alteration deploy next
npx @logto/cli db alteration deploy next
如果你正在开发需要数据库更改的功能,除了更新数据库模式之外,你还需要提供以下格式的脚本:
next-[timestamp]-what-to-do.ts
查看 此目录 以获取参考。