pg_depend テーブルは、データベースオブジェクト間の依存関係を記録します。 この情報によって DROP コマンドが、他のどのオブジェクトを DROP CASCADE で削除する必要があるかを判断し、また、DROP RESTRICT ケースで削除を防止することができます。
Table 3-13. pg_depend の列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
classid | oid | pg_class.oid | 依存するオブジェクトを含んだシステムカタログの OID |
objid | oid | どんな OID 属性であっても | 特定の依存するオブジェクトの OID |
objsubid | int4 | テーブル属性に対して、これは属性の(objid と classid がテーブル自身を参照する)列番号です。他のすべてのオブジェクト型に対し現在このフィールドはゼロとなっています。 | |
refclassid | oid | pg_class.oid | 参照されるオブジェクトを含んだシステムカタログの OID |
refobjid | oid | どんな OID 属性であっても | 特定の参照されるオブジェクトの OID |
refobjsubid | int4 | テーブル属性に対して、これは属性の(refobjid と refclassid がテーブル自身を参照する)列番号です。 他のすべてのオブジェクト型に対し現在このフィールドはゼロとなっています。 | |
deptype | char | この依存関係の特定のセマンティクスを定義するコード。 |
すべての場合において、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 の実行時にのみ作成されます。 依存するオブジェクトのフィールドにはゼロが含まれます。
将来的に、他の依存関係のオプションが必要になる可能性があります。