pg_depend カタログは、データベースオブジェクト間の依存関係を記録します。この情報によって DROP コマンドが、他のどのオブジェクトを DROP CASCADE で削除する必要があるか、また、DROP RESTRICT で削除を防止するかの場合を判断します。
表 43-13. pg_depend Columns
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
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 によって指定される以下のようないくつかのオプションもあります。
個別に作成されたオブジェクト間の通常の関係です。依存しあうオブジェクトは参照されるオブジェクトに影響を与えずに削除できます。参照されるオブジェクトは CASCADE を指定することによってのみ削除することができます。この場合は依存するオブジェクトも削除されます。 例: テーブルの列は、そのデータ型に対して通常の依存関係を持ちます。
依存するオブジェクトは参照されるオブジェクトから独立して削除することができます。そして、参照されるオブジェクトが削除される時は(RESTRICT もしくは CASCADE モードに関わりなく)依存するオブジェクトも自動的に削除されなければなりません。例: テーブル上の名前付き制約はテーブル上に自動設定されているため、テーブルが削除されると無くなります。
依存するオブジェクトは参照されるオブジェクトの作成時に作成されたもので、実際に内部実装の一部に過ぎません。依存するオブジェクトに対して DROP コマンドを直接的に実行できません(その代わりに、参照されるオブジェクトに対して DROP を実行するように指示されます)。 参照されるオブジェクトに DROP を実行すると、CASCADE が指定されているかどうかに関わらず、依存するオブジェクトも削除されます。 例: 外部キー制約を強制するために作成されたトリガは内部的に制約の pg_constraint エントリに依存しています。
依存するオブジェクトはありません。この型のエントリは、参照されるオブジェクトにシステム自体が依存し、したがってオブジェクトを絶対に削除してはならないことを示します。この型のエントリは initdbinitdb の実行時にのみ作成されます。依存するオブジェクト列にはゼロが含まれます。
将来的に、他の依存関係のオプションが必要になる可能性があります。