2017-03-03 19 views
1

我有一個名爲current_schema.I的現有模式,每幾小時接收一次新的第三方數據。我想在它每隔幾個小時更換數據和這裏就是我打算做在postgres中交換生產模式

1-寫的是新的數據Postgres的溫度模式
2 - 重命名CURRENT_SCHEMA到current_schema_del
3-重命名臨時到CURRENT_SCHEMA
4-刪除current_schema_del

現在,如果有人在執行步驟2和3時嘗試訪問/修改數據,會發生什麼情況?這是否正確?

回答

1

您的程序應該正常工作。

作爲第2步,您也可以立即刪除舊的模式。

刪除將需要ACCESS EXCLUSIVE對模式及其中所有對象的鎖定,因此它必須等待,直到完成訪問這些對象的所有早期事務。

一種選擇是使用一個函數(使用SECURITY DEFINER並由超級用戶擁有)來殺死所有訪問這些對象的事務,以便您不必等待長時間運行的事務結束。