2013-11-22 104 views
0

PostgreSQL的9更新SQL缓慢更新时间戳

我有超过50万行的表,我想更新领域一些 “无时区的时间戳”。

UPDATE order_update 
SET last_attempt_ts = (last_attempt_ts AT TIME ZONE 'EST') AT TIME ZONE 'UTC'; 

但是这个sql很慢,有没有更好更快的方法来做到这一点?

+1

你说你想更新一些记录,但是你没有where子句。 –

+2

您正在使用该语句更新所有500.000行 - 这将需要一段时间。 –

回答

0

如果我明白你正在尝试做的,你是从美国东部时间转换时间戳UTC(即使寿领域没有要调整的时间计算时间区)

你有没有试过这种?:

UPDATE order_update 
SET last_attempt_ts = last_attempt_ts + interval '5 hour'; 

运行它做了回滚

回滚之后;

因为EST有夏令时,这意味着你需要添加4小时或5,某些月份,所以你确实需要运行2个查询有同样的效果

希望它能帮助!

+0

好吧,对不起,让我改变查询 –

+0

我得到这个错误: 错误:运算符不存在:时间戳无时区+整数 线3:... E order_update SET last_attempt_ts = last_attempt_ts + 5/24; ^ 提示:没有操作符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 ********** **********错误 错误:运营商不存在:没有时区+整数时间戳 SQL状态:42883 提示:无需人工匹配给定名称和参数类型。您可能需要添加显式类型转换。 字符:96 – klind

+0

嗯,它有点快...(为什么格式化的评论像垃圾)---- UPDATE order_update SET last_attempt_ts = last_attempt_ts + interval'5 hour'; 成功返回查询:5375416行受影响,240137毫秒执行时间。 UPDATE order_update SET last_attempt_ts =(last_attempt_ts AT TIME ZONE'EST')AT TIME ZONE'UTC'; 查询成功返回:5375416行受影响,279018 ms执行时间。 – klind