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
には、参照オブジェクトまたは依存オブジェクトとして固定されたオブジェクトを持つエントリは作成されません。