pg_shdependカタログは、ロールのようなデータベースオブジェクトと共有オブジェクト間のリレーション依存関係を保持します。 この情報はPostgreSQLが依存関係を削除しようとする前に、これらのオブジェクトを参照されないようにすることを保障することを許可します。
pg_dependを参照してください。これは単一のデータベースのオブジェクトに関する依存関係に対する似たような関数の役割を持っています。
多くのシステムカタログと異なりpg_shdependはクラスタの全てのデータベースに共有されています。データベースごとではなく、クラスタごとにただ1つのpg_shdependのコピーがあります。
表 44-32. pg_shdependの列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
dbid | oid | pg_database.oid | 依存するオブジェクトが入っているデータベースのOID、もしくは共有オブジェクトに対してはゼロ |
classid | oid | pg_class.oid | 依存するオブジェクトが入っているシステムカタログのOID |
objid | oid | any OID column | 特定の依存するオブジェクトのOID |
objsubid | int4 | これは、テーブルの列のための列番号です。(objidとclassidはテーブルそのものを参照しています) 他のすべてのオブジェクト型にたいしては、この列はゼロになります。 | |
refclassid | oid | pg_class.oid | 参照されるオブジェクトが入っているシステムカタログのOID(共有カタログである必要があります) |
refobjid | oid | いかなるOID列 | 特定の参照されるオブジェクトのOID |
deptype | char | この依存関係の特定のセマンティクスを定義するコード(テキストを参照)。 |
全ての場合において、pg_shdependエントリは依存するオブジェクトも削除しない限り、参照されるオブジェクトを削除できないことを示します。もっとも、deptypeによって指定される以下のようないくつかのオプションもあります。
参照されるオブジェクト(ロールである必要があります)が依存するオブジェクトの所有者です。
参照されたオブジェクト(ロールである必要があります)が、依存するオブジェクトのACL(アクセス制御リスト。権限リストのこと)内で述べられています。(所有者はSHARED_DEPENDENCY_OWNERのエントリを持つため、SHARED_DEPENDENCY_ACLのエントリは、オブジェクトの所有者に対して作成されません。)
独立したオブジェクトはありません。このエントリの型は、システム自体が参照されるオブジェクトに依存している記号です。よってオブジェクトは削除されてはいけません。この方のエントリは、initdbによってのみ作成されます。依存したオブジェクトの列はゼロを含んでいます。
他の依存関係のオプションが将来必要になる可能性があります。現状の定義は、参照されるオブジェクトとしてロールのみをサポートしていることに特に注意してください。