Project Icon

pgroll

PostgreSQL零停机模式迁移工具

pgroll是一款开源命令行工具,用于PostgreSQL数据库的零停机模式迁移。它通过同时支持多个模式版本,确保数据库更新时应用程序持续运行,无需锁定即可应用更改。pgroll支持新旧模式并行运行,降低迁移风险,简化应用部署,并提供即时回滚功能。

pgroll标志

许可证 - Apache 2.0  CI构建   发布   Discord   X(前Twitter)关注

pgroll - Postgres的零停机时间、可逆的架构迁移

pgroll是一个开源命令行工具,通过同时提供多个架构版本,为PostgreSQL提供安全且可逆的架构迁移。它负责处理复杂的迁移操作,以确保在更新数据库架构时客户端应用程序持续运行。这包括确保在不锁定数据库的情况下应用更改,并使新旧架构版本同时工作(即使在进行破坏性更改时也是如此!)。这消除了与架构迁移相关的风险,并大大简化了客户端应用程序的部署,同时还允许即时回滚。

有关pgroll解决的问题的更多信息,请参阅介绍性博客文章

特性

  • 零停机时间迁移(无数据库锁定,无破坏性更改)。
  • 保持新旧架构版本同时工作。
  • 需要时自动列回填。
  • 迁移过程中出现问题时可即时回滚。
  • 适用于现有架构,无需从头开始。
  • 适用于Postgres 14.0或更高版本。
  • 适用于任何Postgres服务(包括RDS和Aurora)。
  • 用Go编写,跨平台单一二进制文件,无外部依赖。

pgroll的工作原理

pgroll通过在物理表之上使用视图来创建虚拟架构。这允许执行迁移所需的所有必要更改,而不影响现有客户端。

pgroll的多个架构版本

pgroll遵循扩展/收缩工作流。在迁移开始时,它将在物理架构中执行所有增量更改(创建表、添加列等),而不会破坏它。

当列需要进行破坏性更改时,它将在物理架构中创建一个新列,并从旧列回填数据。同时,配置触发器以确保在整个活动迁移期间,对旧/新列的所有写入都会传播到其对应列。然后,新列将在新版本的架构中公开。

一旦开始阶段完成,新架构版本就准备就绪,将所有视图映射到适当的表和列。客户端应用程序随后可以访问新架构版本,而旧版本仍然可用。这是开始推出新版本客户端应用程序的时机。

pgroll的多个架构版本

当没有更多客户端应用程序使用旧架构版本时,可以完成迁移。这将移除旧架构,新架构将成为唯一可用的版本。不再需要的表和列将被删除(此时没有客户端使用它们),新的表和列将被重命名为最终名称。在此阶段,客户端应用程序仍然可以正常工作,因为视图仍然映射到适当的表和列。

目录

安装

二进制文件

Linux、macOS和Windows的二进制文件可在我们的发布页面获取。

从源代码

要从源代码安装 pgroll,请运行以下命令:

go install github.com/xataio/pgroll@latest

注意:需要 Go 1.21 或更高版本。

通过包管理器 - Homebrew 安装

要使用 homebrew 安装 pgroll,请运行以下命令:

# macOS 或 Linux
brew tap xataio/pgroll
brew install pgroll

使用方法

按照以下步骤使用 pgroll 执行您的第一次架构迁移:

准备数据库

pgroll 需要在数据库中存储一些内部状态。将创建一个表来跟踪当前架构版本并存储版本历史。要准备数据库,请运行以下命令:

pgroll init --postgres-url postgres://user:password@host:port/dbname

开始迁移

创建一个迁移文件。您可以查看 examples 文件夹中的一些示例。例如,使用此迁移文件创建一个新的 customers 表:

initial_migration.json
{
  "name": "initial_migration",
  "operations": [
    {
      "create_table": {
        "name": "customers",
        "columns": [
          {
            "name": "id",
            "type": "integer",
            "pk": true
          },
          {
            "name": "name",
            "type": "varchar(255)",
            "unique": true
          },
          {
            "name": "bio",
            "type": "text",
            "nullable": true
          }
        ]
      }
    }
  ]
}

然后运行以下命令开始迁移:

pgroll --postgres-url postgres://user:password@host:port/dbname start initial_migration.json

这将在数据库中创建一个新的架构版本,并应用迁移操作(创建表)。此命令完成后,旧版架构(没有 customers 表)和新版架构(有 customers 表)将同时可访问。

配置客户端应用程序

开始迁移后,客户端应用程序可以开始使用新的架构版本。为此,需要配置它们以访问新版本。这可以通过将 search_path 设置为新架构版本名称(由 pgroll start 输出提供)来完成,例如:

SET search_path TO 'public_initial_migration';

完成迁移

当没有更多客户端应用程序使用旧架构版本时,可以完成迁移。这将删除旧架构。要完成迁移,请运行以下命令:

pgroll --postgres-url postgres://user:password@host:port/dbname complete

回滚迁移

在迁移过程中的任何时候,都可以回滚到前一个版本。这将删除新架构,并将旧架构保留为迁移开始前的状态。要回滚迁移,请运行以下命令:

pgroll --postgres-url postgres://user:password@host:port/dbname rollback

文档

有关更高级的用法、教程和详细选项,请参阅完整的文档

贡献

我们欢迎社区的贡献!如果您想为 pgroll 做出贡献,请遵循以下准则:

  • 为任何问题、错误报告或功能请求创建一个issue
  • 在打开新的 issue 之前,请查看文档和现有 issues

贡献代码

  1. Fork 仓库。
  2. 为您的功能或错误修复创建一个新分支。
  3. 进行更改并编写测试(如果适用)。
  4. 确保您的代码通过 linting 和测试。
  5. 提交拉取请求。

对于这个项目,我们承诺以有助于建立开放、友好、多样化、包容和健康的社区的方式行动和互动。

参考

这是一份帮助我们获得灵感或与 pgroll 类似的项目和文章列表:

许可证

本项目采用 Apache License 2.0 许可 - 有关详细信息,请参阅 LICENSE 文件。

支持

如果您有任何问题、遇到问题或需要帮助,请在此仓库中开启一个 issue 或加入我们的 Discord,我们的社区将很乐意为您提供帮助。


Xata 🦋 用 :heart: 制作

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号