PostgreSQL的9更新SQL缓慢更新时间戳
我有超过50万行的表,我想更新领域一些 “无时区的时间戳”。
UPDATE order_update
SET last_attempt_ts = (last_attempt_ts AT TIME ZONE 'EST') AT TIME ZONE 'UTC';
但是这个sql很慢,有没有更好更快的方法来做到这一点?
PostgreSQL的9更新SQL缓慢更新时间戳
我有超过50万行的表,我想更新领域一些 “无时区的时间戳”。
UPDATE order_update
SET last_attempt_ts = (last_attempt_ts AT TIME ZONE 'EST') AT TIME ZONE 'UTC';
但是这个sql很慢,有没有更好更快的方法来做到这一点?
如果我明白你正在尝试做的,你是从美国东部时间转换时间戳UTC(即使寿领域没有要调整的时间计算时间区)
你有没有试过这种?:
UPDATE order_update
SET last_attempt_ts = last_attempt_ts + interval '5 hour';
运行它做了回滚
回滚之后;
因为EST有夏令时,这意味着你需要添加4小时或5,某些月份,所以你确实需要运行2个查询有同样的效果
希望它能帮助!
好吧,对不起,让我改变查询 –
我得到这个错误: 错误:运算符不存在:时间戳无时区+整数 线3:... E order_update SET last_attempt_ts = last_attempt_ts + 5/24; ^ 提示:没有操作符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 ********** **********错误 错误:运营商不存在:没有时区+整数时间戳 SQL状态:42883 提示:无需人工匹配给定名称和参数类型。您可能需要添加显式类型转换。 字符:96 – klind
嗯,它有点快...(为什么格式化的评论像垃圾)---- 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
你说你想更新一些记录,但是你没有where子句。 –
您正在使用该语句更新所有500.000行 - 这将需要一段时间。 –