2012-03-28 24 views
2

我需要的是有1,700記錄我的表中添加的思維,獅身人面像三角柱,然後我需要索引字段。添加柱無故障時間

數據庫是postgres和添加列會導致一個不能光禿禿的小時的停機時間,所以任何建議/想法,如何改變表,所以沒有整個表的鎖。

+0

您爲什麼認爲需要一個小時才能更新?我剛剛在一個約3,400,000行的生產臺上進行了測試。添加新列需要4.366毫秒,創建索引 - 8725.777毫秒。 – strkol 2012-03-28 14:58:47

回答

1

我能想到的唯一解決方法是避免表鎖被鎖,是創建一個具有所需結構的新表。然後使用INSERT INTO ... SELECT填充該表,重新創建所有索引(包括新索引),然後將新表重命名爲舊錶。

重命名錶可以在事務中這樣做,沒有客戶會注意到這一點(雖然這可能需要一些時間,因爲我覺得RENAME將等待,直到它得到一個排它鎖)。

您將不得不重新創建外鍵引用該表以及(約鎖定參與該級別不知道)。

當然這只是如果你有足夠的空間可以讓你可以保持桌面的完整副本左右。

+0

以及在這種情況發生時沒有人更新原始表 – xordon 2012-06-21 01:28:45