小编kei*_*hmo的帖子

保留无效约束的影响

我正在对大型数据库执行架构更改,纠正古老的设计错误(将主键及其相应的外键从 扩展INTEGERBIGINT)。基本流程是:

  • 关闭我们的应用程序。
  • 删除数据库触发器和约束。
  • 执行更改(ALTER TABLE foo ALTER COLUMN bar TYPE BIGINT针对每个表和主/外键)。
  • 重新创建触发器和约束 ( NOT VALID)。
  • 重新启动应用程序。
  • 验证约束(ALTER TABLE foo VALIDATE CONSTRAINT bar对于每个约束)。

笔记:

  • 我们的 Postgres DB(版本 11.7)和应用程序托管在 Heroku 上。
  • 我们的一些表非常大(数百万行,最大的约为 1.2B 行)。

问题出在最后的验证步骤中。当条件恰好“正确”时,单个用户ALTER TABLE foo VALIDATE CONSTRAINT bar可以以超出 WAL 写入容量的速度创建数据库写入。这会导致不同程度的不满,甚至导致数据库服务器崩溃。(我的理解是,Heroku 使用定制的 WAL 插件来实现他们的“连续备份”和“数据库跟随者”功能。我已经尝试就这个问题联系 Heroku 支持人员 - 他们的回应没有什么帮助,尽管我们'有关企业级支持合同)。

我的问题:将这些限制留在州内有什么坏处吗NOT VALID

相关:有谁知道为什么验证约束会产生如此多的写入活动?

postgresql

5
推荐指数
1
解决办法
1173
查看次数

标签 统计

postgresql ×1