头疼管理 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

相关推荐
稷下元歌12 分钟前
七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。
网络·数据库·笔记
潮起鲸落入海20 分钟前
mysql 5.x源码安装
数据库·mysql
睡不醒男孩0308231 小时前
第一篇:多云与多模态时代的企业级数据库云管理平台(DBaaS)选型指南
数据库·clup·中启乘数
小二·1 小时前
向量数据库实战
数据库
炘爚1 小时前
Phase 5:MySQL 连接池
数据库·mysql
j_xxx404_2 小时前
MySQL库操作硬核解析:字符集、校验规则、大小写比较、备份恢复与连接排查
运维·服务器·数据库·人工智能·mysql·ai·oracle
minji...2 小时前
MySQL数据库 (五) MySQL表的约束(上),非空约束,默认值约束,零填充约束,主键约束,符合主键
数据库·mysql·表的约束·主键约束·非空约束·复合主键·零填充约束
拾贰_C2 小时前
【python | installation 】python 安装 | Windows | 命令使用
linux·数据库·ubuntu
贺今宵3 小时前
Vue 3 + Capacitor 使用jeep-sqlite,web端使用本地sqlite数据库
前端·数据库·vue.js·sqlite·web
列星随旋3 小时前
MySQL面经整理
数据库·mysql