module ActiveRecord::ConnectionAdapters::CockroachDB::ReferentialIntegrity

Public Instance Methods

disable_referential_integrity() { || ... } click to toggle source
# File lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb, line 14
def disable_referential_integrity
  foreign_keys = tables.map { |table| foreign_keys(table) }.flatten

  foreign_keys.each do |foreign_key|
    remove_foreign_key(foreign_key.from_table, name: foreign_key.options[:name])
  end

  yield

  foreign_keys.each do |foreign_key|
    begin
      add_foreign_key(foreign_key.from_table, foreign_key.to_table, foreign_key.options)
    rescue ActiveRecord::StatementInvalid => error
      if error.cause.class == PG::DuplicateObject
        # This error is safe to ignore because the yielded caller
        # already re-added the foreign key constraint.
      else
        raise error
      end
    end
  end
end