2017-09-21 102 views
1

當使用DROP VIEW xxx CASCADE時,除了其他視圖之外是否還有其他對象可以刪除?哪些對象可以通過刪除查看CASCADE刪除

Documentation沒有說明太多:

CASCADE

自動刪除依賴於視圖(如其他視圖)的對象,

+0

也許是一個運行視圖的函數。您可以檢查依賴於視圖的對象,只需運行「drop view xxx」,並且如果有任何依賴對象,它會投訴它並列出所有依賴對象。 –

+1

更多信息位於鏈接部分:https://www.postgresql.org/docs/current/static/ddl-depend.html我想找出最簡單的方法是運行'drop' _without_ cascade並閱讀該錯誤消息(如手冊中所建議的) –

+0

@a_horse_with_no_name但在那裏它不能解釋什麼對象可以依賴於視圖 – alostale

回答

1

內有一個巨大可能被丟棄的對象類型數量,但您很可能遇到的數量很少。

視圖可能被其他視圖,物化視圖或規則直接引用。 (從函數內的提及並不跟蹤,所以CASCADE不會接他們;他們就會失敗在運行時)

最重要的是,每一個視圖v具有相關聯的數據類型的複合和v陣列型v[],它可以用作表格中列的類型,或函數的參數/返回值,而且CASCADE也會選擇它們。

這延伸到包含某個值表達式的對象定義,因爲它可能包含對此類型的轉換:列默認值,類型默認值,觸發條件,RLS策略,索引表達式和檢查約束。如果他們引用視圖的OID('v'::regclass)或類型('v'::regtype'v[]'::regtype),它們也將被丟棄。

當然,從那裏它保持級聯,所以可以由DROP VIEW取出的對象類型的列表變得相當長。

但是除了文檔中提到的情況,我懷疑你正在做這些事情;我並不感到驚訝,他們決定不詳細說明......