头疼管理 Postgres Schema?开源工具大盘点!

Postgres 前不久荣获了 DB-Engines 2023 年度数据库的桂冠,其生态也在蓬勃发展,不过,迁移 Postgres 数据库 schema 仍旧令人头疼,不是一件好办的事儿。 本文中,我们盘点几个好用的用于 Postgres 的开源数据库 schema 迁移工具。

Bytebase

Bytebase 是一款为研发团队准备的数据库 CI/CD 工具,专为开发者和 DBA 打造,用于协同处理数据库变更。Bytebase 使用 Go 和 TypeScript 编写。

Bytebase 提供了一系列可配置的 SQL 语法检查规则,用于检测 SQL 反模式,例如可以约束 NOT NULL。

除了管理数据库变更,Bytebase 还提供带有数据访问控制、动态数据脱敏和审计日志的 SQL 编辑器,以收口查询路径。

Liquibase

Liquibase 可以说是这个领域中最知名的产品。它基于命令行界面,使用 Java 编写。在 Liquibase 里,schema 迁移基于 Changeset 和 Changelog。可能由于其悠久历史和 Java 根基,最常用的形式是 XML(不过后来添加了 YAML 和 JSON 支持)。

使用适当注释也可支持普通 SQL 语句。

Flyway

Flyway 是另一个具有悠久历史和庞大客户群的开源项目。其核心是 CLI 和 Java 库。

Flyway 已被 Redgate 收购,但仍保持着开发者至上的初心,这一点在它官网也可以看出来。

Liquibase 和 Flyway 在其提供的功能上非常相似。它们之间的关键区别在于目标受众:Liquibase 面向企业客户,而 Flyway 则更注重开发人员友好和易用性。

Reshape

Reshape 采用了一种新颖的方法来实现零停机模式的 schema 迁移。它基于命令行界面,并使用 Rust 编写。Reshape schema 迁移包括 3 个阶段:

  • 开始迁移 reshape migration start:设置视图和触发器,以确保新旧 schema 同时可用。
  • 逐步发布应用:可以无需停机,逐步推出应用。现有部署将继续使用旧 schema,而新部署将使用新 schema。
  • 完成迁移 reshape migration complete:删除旧 schema 和任何中间数据和触发器。

作者目前正在开发 ReshapeDB,一种全新的数据库,旨在使零停机模式下的 schema 和数据迁移尽可能简单且安全。

顺口一提,pgroll 则是受 Reshape 启发的另一个 Postgres schema 迁移工具。pgroll 基于 CLI,用 Go 编写。它是 Xata 构建的,Xata 是基于 Postgres 的 serverless 数据库平台。

graphile-migrate

graphile-migrate 是个基于 SQL 的,有态度的(opinionated) 只允许前向(roll forward) 的 Postgres schema 迁移工具。 graphile-migrate 也基于 CLI,使用 TypeScript 编写。它还可以与 PostGraphile 一起,在变更数据库时生成 GraphQL schema。

  • graphile-migrate 引入了另一个新颖的想法:commit 和 uncommit 命令。它在开发本地数据库时实现了类似 git 的工作流。
  • graphile-migrate commit 将当前迁移提交到 committed/ 文件夹中,并重置当前迁移,并重置影子数据库。
  • graphile-migrate uncommit 将最新提交从已提交的迁移文件夹中移到当前迁移(假设当前迁移为空),并从本地数据库中删除迁移跟踪条目。

总结


💡 更多资讯,请关注 Bytebase 公号:Bytebase

相关推荐
阿杰学编程15 分钟前
Go 语言中的条件判断和for 循环
java·数据库·golang
文牧之25 分钟前
PostgreSQL的扩展lo
运维·数据库·postgresql
我科绝伦(Huanhuan Zhou)29 分钟前
MOP数据库备份脚本生成工具
前端·css·数据库
步行cgn31 分钟前
MySQL 中 DISTINCT 去重的核心注意事项详解
数据库·mysql
南棱笑笑生43 分钟前
20250617在ubuntu20.04.6下编译飞凌OK3576-C_Linux6.1.75_用户资料_R1(更新日期_20241014)
数据库
花开月满西楼2 小时前
Android实例项目【智能家居系统】实现数据库登录注册+动画效果+网页跳转+短信发送!!!
android·数据库·智能家居
洗发水很好用2 小时前
制造部门的转型目标与场景痛点
大数据·数据库·制造
芳菲菲其弥章2 小时前
【数据分析三:Data Storage】数据存储
数据库·数据挖掘·数据分析
web守墓人3 小时前
【go】(仅思路)使用go实现一款简单的关系型数据库gosql
开发语言·数据库·golang
码码不爱我4 小时前
报错:Maven无法解析插件 org.apache.maven.plugins:maven-surefire-plugin:3.0.0
java·数据库·maven