2017-04-04 104 views
0

我想更改物化視圖的一個字段中的值構造。 (例如,對文本字段使用UPPER()而不是LOWER())視圖的任何字段類型和任何屬性都不受影響。 問題在於此物化視圖是主視圖。一些視圖依賴於它並且視圖依賴於這些視圖等等。所以放棄這個視圖是不可能的,因爲有超過30個依賴視圖。 一個不好的解決方案是以正確的順序刪除30個視圖,並(重新)創建30個視圖。在PostgreSQL 9.3中編輯物化視圖(如果其他視圖依賴於它)

一個很好的解決方案是在一個事務中封裝刪除和創建主視圖,並掛起這段時間的依賴關係檢查。但似乎這在PostgreSQL 9.3中是不可能的。我對嗎?

回答

0

唯一的解決方案是刪除並重新創建所有依賴於物化視圖的視圖。

0

不幸的是,你不能「暫停依賴檢查」的意見。 (儘管你可以爲存儲過程做類似的事情)。

如果只有幾個視圖直接依賴於這個物化視圖,但更多取決於這些(更進一步的依賴鏈),那麼只需用虛擬替換直接依賴關係(如果這些依賴關係沒有實現)值:

CREATE OR REPLACE VIEW immediate_dependecy_1 AS 
    SELECT NULL::uuid col_alias_1, 
     NULL::int col_alias_2, 
     NULL::text col_alias_3, 
     ... 

:這隻會工作,當列名&類型不使用此CREATE OR REPLACE VIEW改變。從技術角度來看,您可以在已有的列之後添加更多的列。

更換直接依賴後,你可以將&重新創建物化視圖,然後恢復原來的邏輯,這些直接依賴關係了。