首页 > 解决方案 > 查找 Not Null 并将这些字段替换为虚拟数据(大型数据库)

问题描述

需要从表中查找非空字段并将这些字段替换为大型数据库的虚拟数据。我写了一些参考代码。谁能帮我?提前致谢。

需要执行 10 多个包含大量数据的表。每个字段用不同的虚拟数据不一样。即使使用mysql的解决方案也对我有帮助

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

标签: mysqlsqlruby-on-rails

解决方案


  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_columnoverupdate_attribute

理想情况下,Rails 不是为大型数据集更新而构建的。您应该考虑一些本机数据库实用程序。


推荐阅读