pg_dependカタログは、データベースオブジェクト間の依存関係を記録します。この情報によってDROPコマンドが、他のどのオブジェクトをDROP CASCADEで削除する必要があるか、また、DROP RESTRICTで削除を防止するかの場合を判断します。
pg_shdependも参照してください。これはデータベースクラスタ間で共有されるオブジェクトの依存関係に対する似たような関数の役割を持っています。
表 43-16. pg_dependの列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
classid | oid | pg_class.oid | 依存するオブジェクトを含んだシステムカタログのOID |
objid | oid | any OID column | 特定の依存するオブジェクトのOID |
objsubid | int4 | テーブル列に対して、これは(そのテーブルを参照するobjidとclassid)列番号です。他の全てのオブジェクト型に対しこのフィールドはゼロです。 | |
refclassid | oid | pg_class.oid | 特定の参照されるオブジェクトのOID |
refobjid | oid | any OID column | 特定の参照されるオブジェクトのOID |
refobjsubid | int4 | テーブル列に対して、これは(そのテーブルを参照するrefobjidとrefclassid)列番号です。他の全てのオブジェクト型に対しこのフィールドはゼロです。 | |
deptype | char | この依存関係の特定のセマンティクスを定義するコード(テキストを参照)。 |
全ての場合において、pg_dependエントリは依存するオブジェクトも削除しない限り、参照されるオブジェクトを削除できないことを示します。もっとも、deptypeによって指定される以下のようないくつかのオプションもあります。
個別に作成されたオブジェクト間の通常の関係です。依存し合うオブジェクトは参照されるオブジェクトに影響を与えずに削除できます。参照されるオブジェクトはCASCADEを指定することによってのみ削除することができます。この場合は依存するオブジェクトも削除されます。 例:テーブルの列は、そのデータ型に対して通常の依存関係を持ちます。
依存するオブジェクトは参照されるオブジェクトから独立して削除することができます。そして、参照されるオブジェクトが削除される時は(RESTRICTもしくはCASCADEモードに関わりなく)依存するオブジェクトも自動的に削除されなければなりません。例:テーブル上の名前付き制約はテーブル上に自動設定されているため、テーブルが削除されるとなくなります。
依存するオブジェクトは参照されるオブジェクトの作成時に作成されたもので、実際に内部実装の一部に過ぎません。依存するオブジェクトに対してDROPコマンドを直接的に実行できません(その代わりに、参照されるオブジェクトに対してDROPを実行するように指示されます)。 参照されるオブジェクトにDROPを実行すると、CASCADEが指定されているかどうかにかかわらず、依存するオブジェクトも削除されます。 例:外部キー制約を強制するために作成されたトリガは内部的に制約のpg_constraintエントリに依存しています。
依存するオブジェクトはありません。この型のエントリは、参照されるオブジェクトにシステム自体が依存し、したがってオブジェクトを絶対に削除してはならないことを示します。この型のエントリはinitdbの実行時にのみ作成されます。依存するオブジェクト列にはゼロが含まれます。
将来的に、他の依存関係のオプションが必要になる可能性があります。