支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

51.18. pg_depend #

目錄 pg_depend 記錄資料庫物件之間的相依性關係。此資訊讓 DROP 指令可以找到哪些其他物件必須被 DROP CASCADE 刪除,或在 DROP RESTRICT 情況下阻止刪除。

另請參閱 pg_shdepend,它對涉及跨資料庫叢集共享的物件的相依性執行類似的功能。

表 51.18. pg_depend 欄位

欄位 類型

說明

classid oid(參照 pg_class.oid

相依物件所在的系統目錄的 OID

objid oid(參照任何 OID 欄位)

特定相依物件的 OID

objsubid int4

對於資料表欄位,這是欄位編號(objidclassid 參照資料表本身)。對於所有其他物件類型,此欄位為零。

refclassid oid(參照 pg_class.oid

被參照物件所在的系統目錄的 OID

refobjid oid(參照任何 OID 欄位)

特定被參照物件的 OID

refobjsubid int4

對於資料表欄位,這是欄位編號(refobjidrefclassid 參照資料表本身)。對於所有其他物件類型,此欄位為零。

deptype char

定義此相依性關係之特定語意的代碼;請參閱文字


在所有情況下,pg_depend 項目都表示在不刪除相依物件的情況下,無法刪除被參照物件。但是,有幾種子類型由 deptype 識別。

DEPENDENCY_NORMAL (n)

在分別建立的物件之間的正常關係。可以刪除相依物件,而不會影響被參照物件。只能透過指定 CASCADE 刪除被參照物件,在這種情況下,也會刪除相依物件。範例:資料表欄位對其資料類型具有正常相依性。

DEPENDENCY_AUTO (a)

可以將相依物件與被參照物件分開刪除,並且如果刪除被參照物件,則應自動刪除相依物件(無論 RESTRICTCASCADE 模式如何)。範例:資料表上的具名約束會自動相依於該資料表,因此如果刪除該資料表,它將會消失。

DEPENDENCY_INTERNAL (i)

相依物件是在建立被參照物件時建立的,實際上只是其內部實作的一部分。將完全不允許直接 DROP 相依物件(我們將告訴使用者對被參照物件發出 DROP)。DROP 被參照物件將導致自動刪除相依物件,無論是否指定了 CASCADE。如果由於相依於要刪除的某個其他物件而必須刪除相依物件,則其刪除會轉換為刪除被參照物件,因此相依物件的 NORMALAUTO 相依性的行為就像它們是被參照物件的相依性一樣。範例:檢視表的 ON SELECT 規則在內部相依於該檢視表,從而阻止在檢視表保留時刪除它。規則的相依性(例如它參照的資料表)的行為就像它們是檢視表的相依性一樣。

DEPENDENCY_PARTITION_PRI (P)
DEPENDENCY_PARTITION_SEC (S)

相依物件是在建立參照物件時所建立,而且實際上只是其內部實作的一部分;然而,與 INTERNAL 不同的是,存在多個此類參照物件。除非至少有一個此類參照物件被刪除,否則不得刪除相依物件;如果刪除任何一個參照物件,無論是否指定 CASCADE,都應刪除相依物件。另外,與 INTERNAL 不同的是,刪除相依物件所相依的其他物件不會自動刪除任何分割區參照物件。因此,如果刪除沒有透過其他路徑串聯到至少一個這些物件,則會被拒絕。(在大多數情況下,相依物件至少與一個分割區參照物件共享其所有非分割區相依性,因此此限制不會阻止任何串聯刪除。)主要和次要分割區相依性的行為相同,不同之處在於主要相依性在錯誤訊息中優先使用;因此,分割區相依物件應該有一個主要分割區相依性和一個或多個次要分割區相依性。請注意,分割區相依性是除了物件通常會有的任何相依性之外建立的,而不是取代這些相依性。這簡化了 ATTACH/DETACH PARTITION 操作:只需新增或移除分割區相依性。範例:子分割索引會建立對其所在的分割區表和父分割索引的分割區相依性,因此如果刪除其中任何一個,它就會消失,否則不會。對父索引的相依性是主要的,因此如果使用者嘗試刪除子分割索引,錯誤訊息會建議改為刪除父索引(而不是表)。

DEPENDENCY_EXTENSION (e)

相依物件是作為參照物件的擴充套件的成員(請參閱 pg_extension)。只能透過對參照物件執行 DROP EXTENSION 來刪除相依物件。在功能上,此相依性類型與 INTERNAL 相依性相同,但為了清楚起見並簡化 pg_dump 而將其分開。

DEPENDENCY_AUTO_EXTENSION (x)

相依物件不是作為參照物件的擴充套件的成員(因此 pg_dump 不應忽略它),但如果沒有該擴充套件,它就無法運作,並且如果刪除該擴充套件,則應自動刪除它。也可以單獨刪除相依物件。在功能上,此相依性類型與 AUTO 相依性相同,但為了清楚起見並簡化 pg_dump 而將其分開。

未來可能需要其他相依性類型。

請注意,兩個物件有可能透過多個 pg_depend 條目連結。例如,子分割索引會對其關聯的分割區表具有分割區類型相依性,並且對該表中的每個索引欄位具有自動相依性。這種情況表達了多個相依性語義的聯集。如果其任何相依性滿足其自動刪除的條件,則可以在沒有 CASCADE 的情況下刪除相依物件。相反地,必須滿足所有相依性關於哪些物件必須一起刪除的限制。

initdb 期間建立的大多數物件都被認為是釘選的,這表示系統本身依賴於它們。因此,永遠不允許刪除它們。此外,由於知道釘選的物件不會被刪除,因此相依性機制不會費力地建立 pg_depend 條目來顯示對它們的相依性。因此,例如,類型為 numeric 的表格欄位名義上對 numeric 資料類型具有 NORMAL 相依性,但實際上 pg_depend 中沒有出現這樣的條目。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。