Skip to main content

从 MongoDB 迁移到 Postgres

将您的应用程序从 MongoDB 迁移到 Postgres——将文档架构转换为关系表,重写查询以使用 Postgres 客户端,并迁移数据。
AuthorCognition
Category迁移
FeaturesPlaybooks
1

设计 Postgres 数据库模式

分析你的 MongoDB 集合并设计对应的关系型数据库结构。如果你的数据涉及多个存在关联关系的集合,请先创建实体关系图(Entity-Relationship Diagram,ERD),在编写任何 SQL 之前验证规范化决策。关键转换模式:
  • Document IDs:将 MongoDB _id 字段转换为 UUID 或 SERIAL 主键
  • Nested objects:扁平化为带有外键关系的独立表
  • Arrays:使用 Postgres 数组类型或单独的关联表
  • Embedded documents:抽取到经过适当规范化的关联表中
schema 准备就绪后,配置安全性:创建具有适当权限的 Postgres 角色,并在需要行级访问控制的表上启用行级安全策略(Row Level Security,RLS)。
2

迁移后端查询及依赖项

将你的 MongoDB 驱动(例如 mongoosemongodb)替换为 Postgres 客户端库——根据你的技术栈选择 Prisma、Drizzle、TypeORM 或 node-postgres。在环境配置中使用 DATABASE_URL 或等价的连接凭据进行更新。查询迁移模式参考:
  • Find operations → SQL SELECT 查询或 ORM 的 .findMany() / .select()
  • Aggregation pipelines → 使用 JOINGROUP BY、子查询、窗口函数
  • Updates → SQL UPDATE 语句
  • Inserts → SQL INSERT 或批量插入方法
如果你的应用使用基于 MongoDB 用户存储的自定义 JWT 鉴权,请将用户查询改为使用 Postgres,同时保持现有的令牌生成和校验逻辑不变。
3

更新前端服务层

更新前端服务以处理迁移带来的任何数据结构变更——最常见的是 _id 变为 id。保持现有服务方法签名不变,这样组件就不需要修改。
  • 如果身份验证流程发生变化,请更新身份验证服务
  • 根据新的数据结构调整 HTTP 客户端的请求/响应处理
  • 如果数据获取模式发生变化,请更新路由守卫和解析器
4

迁移数据并执行端到端测试

导出 MongoDB 数据,将其转换为与 Postgres 模式兼容的结构,然后导入。导入完成后,在 Postgres 后端上运行完整测试套件。验证所有 CRUD 操作、身份验证流程以及基于角色的访问控制是否都能正常工作。
5

部署和优化

使用功能开关(feature flags)进行逐步发布。在迁移过渡期间保留 MongoDB 实例作为回退方案。部署后检查清单:
  • 为高频查询的列添加索引
  • 使用 EXPLAIN ANALYZE 来识别慢查询
  • 设置连接池(例如 PgBouncer)
  • 监控查询性能和连接使用率
  • 为关键问题编写回滚流程文档
在一切稳定并完成验证后,停用 MongoDB 实例。
6

通过操作手册实现可重复执行

如果您需要在多个服务或代码仓库中执行此迁移模式,请将其保存为 playbook,以确保每次会话都遵循相同的流程。以下是一个将 MongoDB 迁移至 Postgres 的 playbook 示例: