2013-11-22 144 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