[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"pack-detail-db-schema-migration-zh":3,"seo:pack:db-schema-migration:zh":97},{"code":4,"message":5,"data":6},200,"操作成功",{"pack":7},{"slug":8,"icon":9,"tone":10,"status":11,"status_label":12,"title":13,"description":14,"items":15,"install_cmd":96},"db-schema-migration","🗄️","#7C2D12","new","本周新建","数据库 Schema 设计 + 迁移包","10 件套，给真正负责数据库的工程师：DrawDB 画图、Atlas 声明式管理 schema、四款迁移工具（Liquibase \u002F golang-migrate \u002F dbmate \u002F pgroll）覆盖各技术栈、Prisma + Drizzle 类型安全 ORM、Faker.js 造种子数据，再加一份零停机 expand-contract 清单。",[16,28,36,43,52,59,66,75,82,89],{"id":17,"uuid":18,"slug":19,"title":20,"description":21,"author_name":22,"view_count":23,"vote_count":24,"lang_type":25,"type":26,"type_label":27},2637,"c1320e30-47d6-11f1-9bc6-00163e2b0d79","drawdb-open-source-database-schema-diagram-editor-c1320e30","DrawDB — Open-Source Database Schema Diagram Editor","A free browser-based tool for designing, visualizing, and exporting database schemas with support for MySQL, PostgreSQL, SQLite, MariaDB, and SQL Server.","Script Depot",60,0,"en","skill","Skill",{"id":29,"uuid":30,"slug":31,"title":32,"description":33,"author_name":34,"view_count":35,"vote_count":24,"lang_type":25,"type":26,"type_label":27},1702,"201b0f1d-3abe-11f1-9bc6-00163e2b0d79","atlas-declarative-database-schema-management-201b0f1d","Atlas — Declarative Database Schema Management","Atlas is a database schema management tool that uses a declarative approach to define and apply schema changes. It supports PostgreSQL, MySQL, SQLite, SQL Server, and ClickHouse with automatic migration planning and drift detection.","AI Open Source",106,{"id":37,"uuid":38,"slug":39,"title":40,"description":41,"author_name":22,"view_count":42,"vote_count":24,"lang_type":25,"type":26,"type_label":27},1894,"1cbacb9a-3d5b-11f1-9bc6-00163e2b0d79","liquibase-database-schema-change-management-migration-1cbacb9a","Liquibase — Database Schema Change Management and Migration","An open-source database migration tool that tracks, versions, and deploys schema changes across relational databases using XML, YAML, JSON, or SQL changelogs.",113,{"id":44,"uuid":45,"slug":46,"title":47,"description":48,"author_name":34,"view_count":49,"vote_count":24,"lang_type":25,"type":50,"type_label":51},1696,"86a17dbc-3abd-11f1-9bc6-00163e2b0d79","golang-migrate-database-migrations-go-cli-86a17dbc","golang-migrate — Database Migrations for Go and CLI","golang-migrate provides a CLI and Go library for managing database schema migrations. It supports over 20 database drivers and reads migration files from local directories, cloud storage, or embedded Go sources.",62,"config","Config",{"id":53,"uuid":54,"slug":55,"title":56,"description":57,"author_name":22,"view_count":58,"vote_count":24,"lang_type":25,"type":26,"type_label":27},1703,"38618c4f-3abe-11f1-9bc6-00163e2b0d79","dbmate-lightweight-database-migration-tool-38618c4f","dbmate — Lightweight Database Migration Tool","dbmate is a simple, framework-agnostic database migration tool written in Go. It works with PostgreSQL, MySQL, SQLite, and ClickHouse using plain SQL migration files and a single binary with no dependencies.",110,{"id":60,"uuid":61,"slug":62,"title":63,"description":64,"author_name":34,"view_count":65,"vote_count":24,"lang_type":25,"type":26,"type_label":27},4100,"d4e550bd-51a7-11f1-9bc6-00163e2b0d79","pgroll-zero-downtime-postgresql-schema-migrations-d4e550bd","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.",40,{"id":67,"uuid":68,"slug":69,"title":70,"description":71,"author_name":72,"view_count":73,"vote_count":24,"lang_type":74,"type":26,"type_label":27},4264,"84ab1d5e-6fa5-42ed-bc57-443b0d997577","zero-downtime-db-migration-expand-contract-checklist-84ab1d5e","Zero-Downtime DB Migration — Expand Contract Checklist","Expand-contract database migration checklist for agents. Covers additive schema changes, batched backfills, rollback, and contract gates.","henuwangkai",54,"",{"id":76,"uuid":77,"slug":78,"title":79,"description":80,"author_name":22,"view_count":81,"vote_count":24,"lang_type":25,"type":26,"type_label":27},992,"2f0e03dd-3567-11f1-9bc6-00163e2b0d79","prisma-next-generation-orm-node-js-typescript-2f0e03dd","Prisma — Next-Generation ORM for Node.js & TypeScript","Prisma is a next-generation ORM for Node.js and TypeScript supporting PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, MongoDB, and CockroachDB. Type-safe database access with auto-generated client and intuitive schema language.",216,{"id":83,"uuid":84,"slug":85,"title":86,"description":87,"author_name":22,"view_count":88,"vote_count":24,"lang_type":25,"type":26,"type_label":27},666,"0e904437-215d-4941-af94-eb0cf7424e0d","drizzle-orm-typescript-sql-feels-like-code-0e904437","Drizzle ORM — TypeScript SQL That Feels Like Code","Type-safe TypeScript ORM with SQL-like syntax. Zero overhead, serverless-ready, supports PostgreSQL, MySQL, SQLite. Schema as code with automatic migrations. 28,000+ GitHub stars.",158,{"id":90,"uuid":91,"slug":92,"title":93,"description":94,"author_name":34,"view_count":95,"vote_count":24,"lang_type":25,"type":26,"type_label":27},2137,"565112f4-40e4-11f1-9bc6-00163e2b0d79","faker-js-generate-realistic-fake-data-testing-565112f4","Faker.js — Generate Realistic Fake Data for Testing","Faker.js generates realistic fake data (names, addresses, emails, products, and more) for testing, seeding databases, and building prototypes in JavaScript and TypeScript.",114,"tokrepo install pack\u002Fdb-schema-migration",{"pageType":98,"pageKey":8,"locale":99,"title":100,"metaDescription":101,"h1":102,"tldr":103,"bodyMarkdown":104,"faq":105,"schema":121,"internalLinks":127,"citations":140,"wordCount":153,"generatedAt":154},"pack","zh","数据库 Schema 设计 + 迁移包 — 10 件套，给真正管数据库的工程师","DrawDB \u002F Atlas \u002F Liquibase \u002F golang-migrate \u002F dbmate \u002F pgroll \u002F 零停机清单 \u002F Prisma \u002F Drizzle \u002F Faker.js。10 件套覆盖可视化、声明、迁移、ORM、种子数据，按顺序装，权衡说清楚。","数据库 Schema 设计 + 迁移包 — 10 件套撑过凌晨 3 点的 schema change","给数据库 owner 的工作鞍具：设计一份 agent 真能读的 schema，生成不锁 5000 万行表的迁移，再用接近真实分布的数据 seed 出来。可视化 → 声明 → 迁移 → ORM → 种子。栈无关：每种语言族一个选项，一层声明层贯穿所有。","## 这个包里有什么\n\n受众：你是 `orders` 表迁移锁了 9 分钟时被叫醒的那个人。你设计 schema、写 `ALTER TABLE`、反向工程 2019 年别人留下的 Postgres、生成 ORM 类型让后端跟数据库别再漂移。AI agent 还是不擅长**真实数据库**相关的活——80 列的 schema、2 亿行的 `events` 表、没人记得为什么加上的外键。\n\n这个包是 10 件套，专门补这个缺口。流程严格按顺序走：**可视化 → 设计 → 迁移 → ORM → 种子 → （生产安全清单全程兜底）。** 五个层次，每一层解锁下一层。\n\n## 按这个顺序装\n\n1. **DrawDB (id 2637)** — 从这里开始。开源、浏览器内的 schema 关系图编辑器。粘贴 `CREATE TABLE` dump 出 ERD；画 ERD 出 DDL。用来**反向工程已有数据库**，在让 agent 动它之前先有图。Agent 看图比看 4000 行 `schema.sql` 准得多。\n2. **Atlas (id 1702)** — 声明层。你写目标 schema（HCL 或 SQL），Atlas 跟线上 DB diff 自动出迁移。支持 PostgreSQL、MySQL、SQLite、SQL Server、ClickHouse。包里最 agent-friendly 的工具：agent 改声明式 `schema.hcl` 没问题，手写命令式 `ALTER` 链经常错。\n3. **Liquibase (id 1894)** — 企业级迁移层。XML \u002F YAML \u002F JSON \u002F SQL changelog，带版本、可回滚、JDBC 全家桶。你出 Java、跨数据库、合规要求每条变更带 rollback 块 — 选它。\n4. **golang-migrate (id 1696)** — Go 原生迁移 CLI + 库。20+ 数据库驱动，纯 SQL up\u002Fdown 文件，没 DSL 要学。跟任何 Go 服务搭配；CI 里就一个静态二进制。\n5. **dbmate (id 1703)** — 栈无关的另一选。单个 Go 二进制，纯 SQL，支持 PostgreSQL \u002F MySQL \u002F SQLite \u002F ClickHouse。不出 Go 但想要一个二进制 CLI、不带 Node\u002FPython\u002FRuby 依赖 — 选它而非 golang-migrate。\n6. **pgroll (id 4100)** — Postgres-only，零停机。自动实现 expand-and-contract：双写 schema、分批回填、切读、丢老列。你最怕的那次迁移（2 亿行表上重命名一列）就用它。\n7. **零停机迁移清单 (id 4264)** — 方法论层。一份可复用的 agent 清单，把任何 expand-contract 迁移走完：加列、发版应用、回填、双读窗口、发版 contract、删老列。挂在 context 里，agent 就不会偷懒直接 `ALTER`。\n8. **Prisma (id 992)** — Node.js \u002F TypeScript 的类型安全 ORM。Schema-first：`schema.prisma` 是真相源，`prisma migrate` 生成 SQL，`prisma generate` 出全类型 client。支持 PostgreSQL \u002F MySQL \u002F MariaDB \u002F SQL Server \u002F SQLite \u002F MongoDB \u002F CockroachDB。Agent 爱 Prisma —— 错误在编译期暴露，不是凌晨 3 点。\n9. **Drizzle ORM (id 666)** — 更轻的备选。TypeScript 原生、SQL 风格语法、零运行时开销、对 serverless 友好。包体积重要（edge、Workers、Lambda）或者你想写起来还像 SQL 的 SQL — 选 Drizzle 而非 Prisma。\n10. **Faker.js (id 2137)** — 种子层。在 JS\u002FTS 里生成真实感的姓名、地址、邮箱、商品。喂给 ORM 的 seed 脚本，dev DB 立刻有 1 万条像样的数据，测试和 agent 的示例查询都不再像假货。\n\n## 它们怎么串起来\n\n```\n        ┌─────────────────┐\n        │  DrawDB (2637)  │  ← 反向工程已有 DB,\n        └────────┬────────┘    或者画新 ERD\n                 │\n                 ▼\n        ┌─────────────────┐\n        │  Atlas (1702)   │  ← 声明式目标 schema\n        └────────┬────────┘    跟线上 diff → SQL\n                 │\n                 ▼\n┌────────────────┴───────────────────┐\n│  迁移执行器（选一个适配你的栈）   │\n│   Liquibase (1894) — Java \u002F XML    │\n│   golang-migrate (1696) — Go       │\n│   dbmate (1703) — 单个二进制       │\n│   pgroll (4100) — 零停机 Postgres  │\n└────────────────┬───────────────────┘\n                 │\n   零停机清单 (4264)\n   守护每一次破坏性变更\n                 │\n                 ▼\n        ┌─────────────────┐\n        │  ORM (Node\u002FTS)  │\n        │  Prisma (992)   │  ← schema-first，全类型 client\n        │  Drizzle (666)  │  ← SQL-first，edge 就绪\n        └────────┬────────┘\n                 │\n                 ▼\n        ┌─────────────────┐\n        │  Faker.js (2137)│  ← 用真实感数据 seed dev DB\n        └─────────────────┘\n```\n\n关键回路：**画出真相（DrawDB）→ 声明目标（Atlas）→ 安全迁移（Liquibase \u002F golang-migrate \u002F dbmate \u002F pgroll，全程被 expand-contract 清单守护）→ 暴露类型化访问（Prisma 或 Drizzle）→ 种子可信数据（Faker.js）。** 跳过声明层迁移就成命令式意大利面；跳过清单 agent 早晚会在生产 drop 一列。\n\n## 你会撞到的权衡\n\n- **声明式（Atlas）vs 命令式（golang-migrate \u002F dbmate）** — Atlas 帮你 diff，绿地项目、小团队很爽；命令式 SQL 文件给你完整控制权，等迁移里要嵌业务逻辑回填时才用得上。大多数团队两个都跑：常规变更 Atlas，复杂的手写。\n- **Liquibase vs golang-migrate \u002F dbmate** — Liquibase XML 味、JDBC 味、对审计友好；Go 系工具纯 SQL、单个二进制、对 CI 友好。合规要 rollback 元数据进版本控制 — 选 Liquibase；团队本能就是「给我 `.sql` 文件」— 选 Go 系。\n- **pgroll vs 手写 expand-contract** — pgroll 只自动化 Postgres 的双写模式。MySQL 或跨库就得自己跳这支舞，清单 4264 是剧本。别在 Liquibase 上面套 pgroll — 一次迁移选其一。\n- **Prisma vs Drizzle** — Prisma 拥有 schema（`schema.prisma`）；Drizzle 要你自己拥有（在 TypeScript 里声明）。Prisma 对 AI agent 更友好 —— DSL 小且一致；Drizzle 对懂 SQL 的人更友好。两者都给迁移、都给类型 client。\n- **Faker.js vs 生产快照** — 假数据规避了拷贝生产行的法务风险。脱敏快照更真实但配起来要几周。先用 Faker，等碰到只在生产基数下才复现的 bug class 再升级到脱敏快照。\n\n## 常见踩坑\n\n- **让 agent 直接生成 `DROP COLUMN`** — 永远走 expand-contract 清单（4264）。agent 会很乐意给你写一行迁移，把还被部署中二进制引用的列直接干掉。\n- **同一个数据库上同时跑 pgroll 和通用迁移工具** — 它们各自写自己的 metadata 表，会打架。一个 DB 选一个。\n- **在 DrawDB 里设计完忘了同步回 Atlas** — 关系图不是真相源，声明式 schema 文件才是。从 DrawDB 导出，粘到 `schema.hcl`，之后别再改关系图。\n- **Faker 调一次就把结果 commit** — Faker 默认非确定性。要 reproducible 测试数据就 seed 它（`faker.seed(42)`），否则 CI 会因行数随机抖动而 flake。\n- **在陌生数据库上跳过画图步骤** — agent 误读 4000 行 `schema.sql`。看 DrawDB ERD 第一遍准确率 80%。重构前永远先反向工程。",[106,109,112,115,118],{"q":107,"a":108},"为啥没有 Postgres MCP server？","MCP server 们（PostgreSQL MCP、Postgres MCP Pro、DBHub、Supabase MCP）住在姐妹包「Postgres for AI Agents」和「后端工程师 AI 工具包」里，下面有内链。这个包是上游的那一段：MCP server 读到 schema 之前，schema 怎么设计、怎么迁移、怎么类型化。两个包一起装就是完整的数据层鞍具。",{"q":110,"a":111},"Atlas 或只用 Liquibase — 选一个？","不同层。Atlas 声明式（你写目标态，它 diff）；Liquibase 命令式（你写变更，它记历史）。多数成熟团队 Atlas 当 schema-as-code 进版本控制，Liquibase 或 golang-migrate 当执行器在生产应用版本化的变更。它们组合用。小团队选其一也行；大多是加列加表 — 选 Atlas；审计要 rollback 元数据 — 选 Liquibase。",{"q":113,"a":114},"为啥四个迁移执行器 — 不过头了吗？","一个栈对一个：Liquibase 给 Java \u002F 跨库 \u002F 企业，golang-migrate 给 Go 店，dbmate 给单个二进制栈无关方案，pgroll 专门给零停机 Postgres。你装符合你现实那个就行。包里全列出来是为了 agent 按手上项目选对的那个，而不是默认用训练数据里最常见那个。",{"q":116,"a":117},"Prisma 或 Drizzle — 今天该选哪个？","Prisma — 想要严格的 schema-first DSL，agent 能安全编辑，生成的 client 编译期就拦住误用。Drizzle — 想要 SQL-first 的手感、edge\u002Fserverless 的小包体、零 ORM 运行时。两个都给迁移、都给类型。诚实划分：在意安全的应用团队 Prisma，在意控制的基建团队 Drizzle。",{"q":119,"a":120},"Faker 真能 seed 出生产级数据吗？","dev 和 CI 够用。压测或验证查询计划终归要脱敏后的生产快照 —— Faker 分布均匀，真实数据是长尾。折中：dev 用 Faker（快、无合规负担），staging 维护独立的脱敏快照管道，发版前在那里验查询计划。",{"@context":122,"@type":123,"name":13,"description":124,"numberOfItems":125,"inLanguage":126},"https:\u002F\u002Fschema.org","ItemList","10 件套，给设计数据库 schema、写迁移、反向工程已有数据库、生成 ORM 类型的工程师 —— 覆盖可视化、声明、迁移、ORM、种子数据，按顺序装。",10,"zh-CN",[128,132,136],{"url":129,"anchor":130,"reason":131},"\u002Fzh\u002Ftopics\u002Fpostgres-for-agents","Postgres for AI Agents 包","姐妹包，覆盖运行时的 MCP server 和 SQL 接口 —— 这个包设计出的 schema 就是它们要消费的对象",{"url":133,"anchor":134,"reason":135},"\u002Fzh\u002Ftopics\u002Fbackend-engineer-ai-toolkit","后端工程师 AI 工具包","相邻包，覆盖 API 契约、脚手架 agent、可观测性 —— 数据库之上的几层",{"url":137,"anchor":138,"reason":139},"\u002Fzh\u002Fai-tools-for\u002Fmcp","浏览所有 MCP server","schema 稳定之后，从目录里挑一个数据库 MCP server 把它接给 agent",[141,145,149],{"claim":142,"source_name":143,"source_url":144},"Atlas 是声明式 schema 管理工具，支持 PostgreSQL、MySQL、SQLite、SQL Server、ClickHouse，自动规划迁移","Atlas 官方文档","https:\u002F\u002Fatlasgo.io\u002F",{"claim":146,"source_name":147,"source_url":148},"pgroll 用 expand-and-contract 模式应用 PostgreSQL schema 变更，不锁表","pgroll GitHub","https:\u002F\u002Fgithub.com\u002Fxataio\u002Fpgroll",{"claim":150,"source_name":151,"source_url":152},"Prisma 是 Node.js \u002F TypeScript 的下一代 ORM，schema-first 迁移 + 生成的类型 client","Prisma 官方文档","https:\u002F\u002Fwww.prisma.io\u002Fdocs",920,"2026-05-22T00:00:00Z"]