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

相关推荐
l1t11 小时前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
MarkHard12315 小时前
如何利用redis使用一个滑动窗口限流
数据库·redis·缓存
island131416 小时前
【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
数据库·redis·bootstrap
心想事成的幸运大王17 小时前
Redis的过期策略
数据库·redis·缓存
倔强的石头_17 小时前
CentOS 上安装KingbaseES(ISO包)详细教程
数据库
2401_8979300617 小时前
使用Docker轻松部署Neo4j图数据库
数据库·docker·neo4j
诗句藏于尽头18 小时前
Django模型与数据库表映射的两种方式
数据库·python·django
寻星探路18 小时前
数据库造神计划第六天---增删改查(CRUD)(2)
java·大数据·数据库
盖世英雄酱5813619 小时前
Read timed out问题 排查
java·数据库·后端
云动雨颤20 小时前
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
数据库·spring boot·tomcat