首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails add_index algorithm::concurrently在迁移过程中仍会导致数据库锁定

Rails add_index algorithm::concurrently在迁移过程中仍会导致数据库锁定
EN

Stack Overflow用户
提问于 2017-10-18 03:30:11
回答 1查看 5.7K关注 0票数 8

为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中概述的建议(由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in专门概述),但是在一个特别大的表上创建索引的过程中,即使是索引创建的“并发”方法也会锁定该表,并导致对该表的任何ActiveRecord创建或更新都会导致它们各自的事务失败并出现PG::InFailedSqlTransaction异常。

下面是我们运行Rails 4.2 (使用ActiveRecord 4.2.7.1)时的迁移情况:

代码语言:javascript
复制
class AddTypeIndexToModel < ActiveRecord::Migration
  disable_ddl_transaction!

  def change
    add_index :model, :model_type_id, algorithm: :concurrently
  end
end
EN

回答 1

Stack Overflow用户

发布于 2017-10-19 00:02:17

事实证明,这个问题与迁移无关,而是在向同一个表中添加新列的同一批处理中运行的先前版本。

因为我们向表中添加了一列,所以我们在Active Record https://github.com/rails/rails/issues/12330中遇到了这个错误,它实质上会导致事务中的所有ActiveRecord操作由于陈旧的PreparedStatement而失败,直到服务器重新启动。

从现在开始,我们将在迁移中使用该问题中描述的解决方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46797811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档