Configs2026年5月17日·1 分钟阅读

pgroll — Zero-Downtime PostgreSQL Schema Migrations

A Go-based migration tool for PostgreSQL that uses expand-and-contract patterns to apply schema changes without locking tables or breaking running applications.

Agent 就绪

这个资产可以被 Agent 直接读取和安装

TokRepo 同时提供通用 CLI 命令、安装契约、metadata JSON、按适配器生成的安装计划和原始内容链接,方便 Agent 判断适配度、风险和下一步动作。

Native · 98/100策略:允许
Agent 入口
任意 MCP/CLI Agent
类型
Skill
安装
Single
信任
信任等级:Established
入口
pgroll Overview
通用 CLI 安装命令
npx tokrepo install d4e550bd-51a7-11f1-9bc6-00163e2b0d79

Introduction

pgroll is a schema migration tool for PostgreSQL that eliminates downtime during DDL changes. It applies the expand-and-contract pattern automatically: creating new columns/tables alongside old ones, syncing data via triggers, and cleaning up once all clients have switched over.

What pgroll Does

  • Applies schema migrations without locking tables or blocking reads/writes
  • Manages dual-version schemas so old and new application code can run simultaneously
  • Auto-generates triggers that keep old and new columns in sync during transitions
  • Tracks migration state in a dedicated schema within the target database
  • Supports rollback by simply cancelling the incomplete migration

Architecture Overview

pgroll operates in two phases. During "start," it creates new schema objects (columns, tables, constraints) and installs row-level triggers that replicate writes between old and new shapes. During "complete," it drops the old objects and removes triggers. A version schema provides each application version its own search_path view.

Self-Hosting & Configuration

  • Install via Go: go install github.com/xataio/pgroll@latest
  • Define migrations in JSON files with a declarative operations DSL
  • Point to your database via --postgres-url or PGROLL_PG_URL env var
  • State is stored in a pgroll schema inside the target database
  • Run in CI by chaining pgroll start followed by pgroll complete after deploy

Key Features

  • True zero-downtime: no ACCESS EXCLUSIVE locks during migration
  • Automatic trigger generation for column transforms and renames
  • Versioned views let old and new code read the schema they expect
  • JSON-based migration format is easy to review in pull requests
  • Supports adding NOT NULL columns, changing types, and renaming without downtime

Comparison with Similar Tools

  • Flyway — sequential SQL scripts but requires maintenance windows for breaking changes
  • Atlas — declarative schema-as-code, supports expand/contract via versioned schemas
  • golang-migrate — simple up/down SQL files, no zero-downtime strategy built in
  • Sqitch — change-management focused, no automatic dual-schema support
  • pg_squeeze — optimizes table bloat, not a general migration tool

FAQ

Q: Does pgroll work with managed PostgreSQL services like RDS or Cloud SQL? A: Yes. It only requires standard DDL and trigger permissions, no superuser access.

Q: Can I write migrations in SQL instead of JSON? A: pgroll uses a JSON DSL for its operations. Raw SQL can be embedded in a "sql" operation type for custom statements.

Q: What happens if I need to roll back? A: Run pgroll rollback before completing. It drops the new objects and removes triggers, restoring the original schema.

Q: How does it handle data backfills? A: Triggers sync new writes automatically. For existing rows, pgroll can run a backfill during the start phase in batches.

Sources

讨论

登录后参与讨论。
还没有评论,来写第一条吧。

相关资产