主要观点:数据库模式迁移是一把双刃剑,虽重要但带来诸多挑战,如潜在的破坏性变更、多步骤操作、意外数据库锁及难以回滚等,导致许多开发者避免复杂迁移,积累技术债务;而pgroll
是一个开源命令行工具,用于对 Postgres 数据库进行模式迁移,基于特定原则设计,能让迁移更安全、易定义和执行、可纳入正常部署流程、易快速回滚且无需特殊编排。
关键信息:
- 模式迁移的挑战:包括破坏应用、多步骤复杂、导致数据库锁及难回滚等。
pgroll
的特点:以高级 JSON 格式定义迁移,在迁移过程中同时保留前后版本 schema 可避免风险,即时回滚,零停机,通过 expand 和 contract 模式自动化数据库模式生命周期,处理数据回填等。pgroll
的工作原理:利用 expand 和 contract 模式,在 Postgres 物理模式之上创建“虚拟”模式,通过表视图暴露和隐藏不同部分的 schema,避免 DDL 导致的数据访问阻塞,自动处理数据回填等。
重要细节:- 如更改列的
NOT NULL
约束等复杂迁移,pgroll
可在不影响现有客户端应用的情况下完成,通过创建新列、添加约束、数据回填、设置触发器等步骤实现。 - 有丰富的模式迁移示例在
pgroll
的examples
和docs
中。 - 目前推出
pgroll
的第一个版本,欢迎反馈,可在 GitHub 仓库提 issue、在 Discord 联系或在 X/Twitter 关注。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。