2017-10-17 2 views
3

本番サイトへのマイグレーション中にデータベーストランザクションエラーを防ぐため、https://github.com/LendingHome/zero_downtime_migrations(詳細はhttps://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-inの概略)のアドバイスに従いましたが、特に大きなテーブルのインデックスでは、インデックス作成の「同時」メソッドでもテーブルがロックされ、そのテーブルでActiveRecordを作成または更新すると、それぞれのトランザクションがPG::InFailedSqlTransaction例外で失敗しました。ここでRails add_indexアルゴリズム::移行中にデータベースロックアップが発生する

は、我々は(ActiveRecordの4.2.7.1を持つ)のRails 4.2を実行しているように、移行が見えたものです:

class AddTypeIndexToModel < ActiveRecord::Migration 
    disable_ddl_transaction! 

    def change 
    add_index :model, :model_type_id, algorithm: :concurrently 
    end 
end 
+0

monkeypatchを使用しましたか?どのように示されているのですかhttps://github.com/barsoom/devbook/tree/master/deploy_without_downtime –

答えて

1

それは問題はその移行に関連していなかったが判明したが、中に走った前1同じテーブルに新しい列を追加していた同じバッチ。

テーブルにカラムを追加したので、Active Record https://github.com/rails/rails/issues/12330でこのバグが発生しました。これは基本的に、サーバが再起動されるまで失効したPreparedStatementによってトランザクションのすべてのActiveRecord操作が失敗する原因となります。

今後、この問題で説明されている回避策を移行で使用します。

関連する問題