0
我有一張桌子,我需要清除而不會中斷服務。約99.99%的數據應該被刪除,所以我試圖重新創建表和移動0.01%有用的數據到新表如下(我將截斷後舊錶):如何在不中斷服務的情況下重新命名/重新創建表格?
BEGIN ISOLATION LEVEL SERIALIZABLE;
LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;
/* I rename the old table */
ALTER TABLE table1 RENAME TO table1_to_be_deleted;
/* And I recreate the table */
CREATE TABLE table1 (
...
);
/* Restore usefull data from old table to new one */
INSERT INTO table1 SELECT * FROM table1_to_be_deleted WHERE toBeKept = 1;
COMMIT;
但當我運行我的事務時,我得到了一些客戶端的錯誤,因爲沒有在新表中找到行,但存在於舊錶中。這些行被良好地標記爲保持,以便它們應該從舊錶複製到交易內部的新的並且由客戶的請求發現......
當其他請求正在等待在表上獲取的鎖時,它有一個指向目標對象的指針?這是唯一我有這可以解釋舊錶的更新後,我承諾我的事務......
PS:我使用的是Postgres 9.1
這些行在您提交後插入?.. –