在Rails中管理PostgreSQL默认列值,无需停机

在Rails中管理PostgreSQL默认列值,无需停机

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

我的团队在Fresha需要在现有表中添加一个支付方式类型列。由于记录量超过5000万且读写频繁,迁移必须小心进行且无停机。添加类型列时使用了NOT NULL约束和默认值'card',PostgreSQL 11+版本确保添加默认值不会重写表。删除默认值不会锁定表,但Rails的partial_inserts选项可能导致插入失败,因此需谨慎检查。

🎯

关键要点

  • Fresha团队需要在现有表中添加支付方式类型列,迁移必须小心进行且无停机。
  • 迁移步骤包括添加类型列、确保应用程序明确指定类型属性、删除默认值。
  • 在PostgreSQL 11+中,添加静态默认值是安全的,不会重写表。
  • 添加带有NOT NULL约束的默认值也是安全的,PostgreSQL会使用默认值进行验证。
  • 删除默认值是元数据操作,不会锁定表,现有行不受影响。
  • Rails的partial_inserts选项可能导致插入失败,需谨慎检查。
  • Rails 7及更新版本默认禁用partial_inserts选项,需确认应用程序设置。
➡️

继续阅读