Postgresql Rails:在所有表中的datetime列中递增

Postgresql Rails:在所有表中的datetime列中递增,postgresql,ruby-on-rails-4,activerecord,Postgresql,Ruby On Rails 4,Activerecord,假设我有20个表,每个表都有更新的列,我想更新所有表中的所有行,例如每行的更新字段应该增加1小时。如何避免更新活动记录对象我更喜欢对每个表运行sql查询一个表一个查询。如果您在的数据库管理部分问这个问题,我想您会得到更好的回答 我尝试过谷歌搜索,可以找到: 选择DATEADD(2017年8月25日第2个月)作为DATEADD 因此,在您的情况下,如果它被称为updated_at,并且该表是users: SELECT UpdatedAt, DATEADD(hour, 1, UpdatedAt)

假设我有20个表,每个表都有更新的列,我想更新所有表中的所有行,例如每行的更新字段应该增加1小时。如何避免更新活动记录对象我更喜欢对每个表运行sql查询一个表一个查询。

如果您在的数据库管理部分问这个问题,我想您会得到更好的回答

我尝试过谷歌搜索,可以找到:

选择DATEADD(2017年8月25日第2个月)作为DATEADD

因此,在您的情况下,如果它被称为updated_at,并且该表是users:

SELECT UpdatedAt, DATEADD(hour, 1, UpdatedAt) AS DateAdd FROM Employees;
我对SQL很在行,但我认为这应该是有道理的


如果它不起作用,请将其重新发布到数据库部分,您会有一些知道他们在说什么的人来帮助您:)

如果您使用
更新列

您应该能够做到:

YourThing.find_each do |thing|
  new_time = thing.updated_at + 1.hour
  thing.update_columns(updated_at: new_time)
end
这将绕过验证和所有回调,因此它应该运行得非常快,这取决于您处理的记录数


以下是关于
更新列的文档

我是如何解决这个问题的

ActiveRecord::Base.connection.execute("UPDATE users SET created_at = created_at + INTERVAL '3600 seconds'")

谢谢但我有更新列的想法,但它需要在每个记录上循环,我有数十亿条记录,这种方法需要花费太多时间才能完成。postgresql不提供DATEADD函数。