pg_shdepend #
pg_shdependカタログは、データベースオブジェクトとロールのような共有オブジェクト間のリレーション依存関係を保持します。
この情報はPostgreSQLが依存関係を削除しようとする前に、これらのオブジェクトを参照されないようにすることを保証することを許可します。
  
pg_dependも参照してください。
pg_dependは単一のデータベース内のオブジェクトに関する依存関係について同じような機能を実行します。
  
多くのシステムカタログと異なりpg_shdependはクラスタの全てのデータベースに共有されています。
データベース毎ではなく、クラスタ毎にただ1つのpg_shdependのコピーがあります。
  
表53.48 pg_shdependの列
| 列 型 説明 | 
|---|
| 
        依存オブジェクトが属するデータベースのOID。 共有オブジェクトの場合はゼロ | 
| 
        依存するオブジェクトが存在するシステムカタログのOID | 
| 
        特定の依存するオブジェクトのOID | 
| 
        
テーブル列の場合、これは列番号です( | 
| 
        参照されるオブジェクトが入っているシステムカタログのOID(共有カタログである必要があります) | 
| 
        特定の参照されるオブジェクトのOID | 
| 
        この依存関係の特定のセマンティクスを定義するコード(後述) | 
すべての場合において、pg_shdepend項目は依存するオブジェクトも削除しない限り、参照されるオブジェクトを削除できないことを示します。
もっとも、deptypeによって指定される以下のようないくつかのオプションもあります。
   
SHARED_DEPENDENCY_OWNER (o)参照されるオブジェクト(ロールである必要があります)が依存するオブジェクトの所有者です。
SHARED_DEPENDENCY_ACL (a)
参照されたオブジェクト(ロールである必要があります)が、依存するオブジェクトのACL(アクセス制御リスト。権限リストのこと)内で述べられています。
(所有者はSHARED_DEPENDENCY_OWNER項目を持つため、SHARED_DEPENDENCY_ACL項目は、オブジェクトの所有者に対して作成されません。)
      
SHARED_DEPENDENCY_POLICY (r)参照されたオブジェクト(ロールである必要があります)が、依存するポリシーオブジェクトのターゲットとして述べられています。
SHARED_DEPENDENCY_TABLESPACE (t)参照されているオブジェクト(テーブル空間でなければなりません)は格納を持たないリレーションのためのテーブル空間として言及されています。
他の依存関係のオプションが将来必要になる可能性があります。 現状の定義は、参照されるオブジェクトとしてロールとテーブル空間のみをサポートしていることに特に注意してください。
pg_dependカタログと同様に、initdb時に作成されるほとんどのオブジェクトは「固定(pinned)」と見なされます。
pg_shdependには、参照オブジェクトまたは依存オブジェクトとして固定されたオブジェクトを持つエントリは作成されません。