41.13. pg_depend

pg_depend 資料表記錄資料庫對像之間的依賴關係。 這個訊息允許 DROP 命令找出哪些其他的對象必須由 DROP CASCADE 刪除,或者是在 DROP RESTRICT 的情況下避免刪除。

Table 41-13. pg_depend 字串

名字類型引用描述
classidoidpg_class.oid有倚賴對像所在系統資料表的 OID
objidoid任何 OID 屬性指定的有依賴對象的 OID
objsubidint4 對於資料表字串,這個是該屬性的字串數(objidclassid引用資料表本身)。 對於所有其他對像類型,目前這個字串是零。
refclassidoidpg_class.oid被引用對像所在的系統資料表的 oid
refobjidoid任意 OID 屬性指定的被引用對象的 OID
refobjsubidint4  對於資料表字串,這個是該字串的字串號(objidclassid引用資料表本身)。 對於所有其他對像類型,目前這個字串是零。
deptypechar  一個定義這個依賴關係特定語義的代碼。見文本。

在所有情況下,一個 pg_depend 記錄資料表示被引用的對象不能在有依賴的對象被刪除前刪除。 不過,這裡還有幾種由 deptype 定義的情況:

DEPENDENCY_NORMAL (n)

獨立建立的對象之間的一般關係。 有倚賴的對象可以在不影響被引用對象的情況下刪除。 被引用對像只有在聲明了CASCADE的情況下刪除,這時有依賴的對象也被刪除。 例子:一個資料表字串對其資料類型有一般依賴關係。

DEPENDENCY_AUTO (a)

有依賴對象可以和被引用對像分別刪除, 並且如果刪除了被引用對像則應該被自動刪除(不管是RESTRICT還是CASCADE模式)。 例子:一個資料表上面的命名約束是在該資料表上的自動依賴關係,因此如果刪除了資料表,它也會被刪除。

DEPENDENCY_INTERNAL (i)

有依賴的對象是作為被引用對象的一部分建立的, 實際上只是它的內部實現的一部分。 DROP有依賴對象是不能直接允許的(我們將告訴用戶發出一條刪除被引用對象的DROP)。 一個對被引用對象的DROP 將傳播到有依賴對象,不管是否聲明了CASCADE。 例子:一個建立來強制外鍵約束的觸發器在該約束的pg_constraint 記錄上是標記為內部依賴的。

DEPENDENCY_PIN (p)

沒有有依賴對像;這種類型的記錄標誌著系統本身依賴於被引用對象,因此這個對象決不能被刪除。 這種類型的記錄只有在initdb的時候建立。有依賴對象的字串裡是零。

將來可能還會有其他依賴的風格。