ruby-on-rails - 更新rake任务中的海量数据

标签 ruby-on-rails ruby postgresql rake-task

我有一个名为 PageDensity 的模型,它有大约 500 万行。

当我创建项目PageDensity表时,它以密度的形式存储了5位小数精度的 float 。

现在要求更改为将其四舍五入到小数点后两位。

我只是编写了一个任务来舍入所有密度,但它使系统变得如此沉重而卡住。即使我不能使用查询,因为我的舍入有点变化,例如0.57500将四舍五入为0.570.57600将四舍五入为 0.58

到目前为止我尝试过的很简单:

  task round_densities: :environment do
    application_object = ApplicationController.new
    time = Benchmark.realtime do
      ActiveRecord::Base.transaction do
        PageDensity.all.each {|p| p.update_attributes(density: application_object.round_number(p.density))}
      end
    end
    puts '***************************************'
    puts "Total Time Consumed #{time} seconds"
    puts '***************************************'
  end

我也尝试进行舍入查询但失败了:

select round(0.00500, 2)
#this returns 0.01 as this should return 0.00

我正在使用 postgres 任何想法来使其 psql 查询 或使用 rails 吗?

最佳答案

听起来您的舍入要求仅比正常舍入少 0.001。

在这种情况下,我认为您可以运行 sql 更新:

update page_densities set density = round(density - 0.001, 2)

这将像这样舍入:

0.011 => round(0.010, 2) => 0.01
0.015 => round(0.014, 2) => 0.01
0.016 => round(0.015, 2) => 0.02
0.02  => round(0.019, 2) => 0.02

关于ruby-on-rails - 更新rake任务中的海量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184944/

相关文章:

ruby-on-rails - 表格选择,默认选择一项

sql - 如何在某些条件下计算选定行中的值 - Postgresql

sql - 在创建 SQL 关系时感到困惑

ruby-on-rails - 设计:突然无法登录

css - Rails 向呈现的页面添加额外的 <style> 标签

ruby-on-rails - 如何修复Rails 5.1.7中的 `uninitialised constant ' ActiveRecord_Relation'`?

ruby - cucumber 调试器没有停止

从 URL 中提取 HTTP 查询参数的 PostgreSQL 函数

ruby-on-rails - Watir-Webdriver - 协议(protocol)不支持的地址族 - socket(2)

ruby-on-rails - Ruby on Rails 在 Amazon AWS 上安装失败 : Could not create Makefile due to some reason, 可能缺少必要的库和/或 header