迁移

从 Neon 迁移

同一个 Postgres,不同的执行模型。这里写清楚什么会变、什么不变,以及如何不停机地搬家。

01

真正改变的是什么

两个产品都给你 PostgreSQL。差别在底下:Neon 把存储与计算分离,并在存储层做分支;CapyDB 在专属存储上跑一个普通的 PostgreSQL 进程,并通过克隆该存储来分支。你能感受到的结果是,CapyDB 的单元表现得就像你笔记本上的 Postgres——因为它就是。

你的 schema、查询、扩展和迁移都原样搬过来。需要留意的是连接层,以及任何针对特定服务商驱动写的代码。

02

你保留的东西

  • -分支:预览数据库是带存活时限的克隆,每个 pull request 一个
  • -缩容到零:闲置单元会休眠,并在下一次连接时唤醒,通常在四分之一秒内
  • -面向 serverless 与边缘运行时的池化端点,以及给其他一切用的直连端点
  • -时间点恢复,来自持续归档而不是夜间快照
  • -面向你已经在用的部署目标的平台集成

03

有哪些不同

  • -没有 HTTP 或 WebSocket 驱动:你通过所有驱动本来就会说的 PostgreSQL 线协议连接
  • -隔离是每个项目一个完整进程和一份存储,而不是共享计算层里的一个租户
  • -计算是按套餐固定的 CPU 与内存上限,而不是自动伸缩的单位
  • -标准单元没有外发网络,因此会向外调用的扩展在结构上不可用

04

改写客户端代码

如果你的项目引入了 Neon 专用的 serverless 驱动,CLI 会替你改写:codemod 把客户端换成标准 PostgreSQL 驱动,修正连接初始化,并把它无法判断的调用点报告出来,而不是瞎猜。

# Dry run by default - nothing is written until you say so
capydb migrate codemod neon
capydb migrate codemod neon --write

05

搬运数据

对着现有连接字符串发起一次导入。跟随模式会在你测试期间让新单元与源保持同步,于是切换变成改一次 DNS 和环境变量,而不是一段维护窗口。

capydb import \
  --project my-app \
  --source-url "$OLD_DATABASE_URL" \
  --follow

06

切换

  • -用跟随模式导入,并在它继续运行时对着单元跑完你的测试套件
  • -运行 capydb doctor,找出仍指向旧数据库的环境变量
  • -在部署平台上替换连接字符串——集成功能可以按环境完成
  • -头几分钟盯着控制台里的日志和连接数
  • -确认无误后停止跟随,再下线源库

07

先问我们

生产切换请在动手前告诉我们。我们会审阅方案、在窗口期在线,并备好一条恢复路径。这不花你钱,却是无聊的一晚和刺激的一晚之间的差别。