Найдите Not Null и замените эти поля фиктивными данными (большая база данных) - PullRequest
0 голосов
/ 15 апреля 2020

Необходимо найти непустое поле из таблиц и заменить эти поля фиктивными данными для огромной базы данных. Я написал некоторый ссылочный код. Может кто-нибудь мне помочь? Заранее спасибо.

Нужно выполнить более 10 таблиц с огромными данными. Каждое поле с разными фиктивными данными не одинаково. Даже решение с mysql также полезно для меня

Address.where.not(encrypted_address: nil).each do |address|
        address.update_attribute(:address, Faker::Address.street_address)
    end

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020
  1. Завершение операции в транзакции ActiveRecord::Base.transaction
  2. загрузка данных в пакетах с использованием find_each
  3. Загрузка только тех столбцов, которые вы хотите изменить, используя select
Address.transaction do
  Address.where.not(encrypted_address: [nil, '']).select(:address).find_each do |address|
    address.update_attribute(:address, Faker::Address.street_address)
  end
end

Если вам не нужно вызывать проверку или обратные вызовы, вы можете рассмотреть возможность использования update_column over update_attribute

В идеале Rails не создан для обновления больших наборов данных. Вы должны рассмотреть некоторые родные утилиты базы данных.

0 голосов
/ 15 апреля 2020

Вы можете использовать update_all, который будет выполнять один SQL запрос.

В вашем случае:

Address.where.not(encrypted_address: nil).update_all(address: Faker::Address.street_address)

Обратите внимание, это обновит все с тем же адресом и будет не активировать обратные вызовы активных записей.

Источник: https://apidock.com/rails/ActiveRecord/Relation/update_all

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...