GBase 8c
其他
文章

GBase 8c系统表pg_depend

发表于2023-12-11 15:50:2613次浏览2个评论

pg_depend系统表记录数据库对象之间的依赖关系。这个信息允许DROP命令找出哪些其它对象必须由DROP CASCADE删除,或者是在DROP RESTRICT的情况下避免删除。

这个表的功能类似pg_shdepend,用于记录那些在数据库集群之间共享的对象之间的依赖性关系。

名称

类型

引用

描述

classid

oid

pg_class.oid

依赖对象所在的系统目录OID

objid

oid

any OID column

指定依赖对象的OID

objsubid

int4

 

对于一个表列,这里是列号(objid和classid指表本身)。对于所有其他对象类型,此列为0。

refclassid

oid

pg_class.oid

被引用对象所在的系统目录的OID

refobjid

oid

any OID column

指定被引用对象的OID

refobjsubid

int4

 

对于一个表列,这里是列号(refobjid和refclassid指表本身)。对于所有其他对象类型,此列为0。

deptype

char

 

定义此依赖关系语义的一个代码

在所有情况下,一个pg_depend记录表示被引用的对象不能在有依赖的对象被删除前删除。不过,这里还有几种由deptype定义的情况:

  1. DEPENDENCY_NORMAL (n):独立创建的对象之间的一般关系。有依赖的对象可以在不影响被引用对象的情况下删除。被引用对象只有在声明了CASCADE的情况下删除,这时有依赖的对象也被删除。例子:一个表字段对其数据类型有一般依赖关系。

  2. DEPENDENCY_AUTO (a):有依赖对象可以和被引用对象分别删除,并且如果删除了被引用对象则应该被自动删除(不管是RESTRICT或CASCADE模式)。例子:一个表上面的命名约束是在该表上的自动依赖关系,因此如果删除了表,它也会被删除。

  3. DEPENDENCY_INTERNAL (i):有依赖的对象是作为被引用对象的一部分创建的,实际上只是它的内部实现的一部分。 DROP有依赖对象是不能直接允许的(将告诉用户发出一条删除被引用对象的DROP)。一个对被引用对象的DROP将传播到有依赖对象,不管是否声明了CASCADE。例子:一个创建来强制外键约束的触发器在该约束的PG_CONSTRAINT记录上是标记为内部依赖的。

  4. DEPENDENCY_EXTENSION (e):依赖对象是被依赖对象extension的一个成员(请参见pg_extension)。依赖对象只可以通过在被依赖对象上DROPEXTENSION删除。函数上这个依赖类型和内部依赖一样动作,但是它为了清晰和简化gs_dump保持分开。

  5. DEPENDENCY_PIN (p):没有依赖对象;这种类型的记录标志着系统本身依赖于被引用对象,因此这个对象决不能被删除。这种类型的记录只有在initdb的时候创建。有依赖对象的字段里是零。

评论

登录后才可以发表评论
崔哥发表于 7个月前
乔木生云气。访中兴、英雄陈迹,暗追前事。战舰东风慳借便,梦断神州故里。旋小筑、吴宫闲地。华表月明归夜鹤,叹当时、花竹今如此。枝上露,溅清泪。遨头小簇行春队。步苍苔、寻幽别坞,问梅开未。重唱梅边新度曲,催发寒梢冻蕊。此心与、东君同意。后不如今今非昔,两无言、相对沧浪水。怀此恨,寄残醉。
崔哥发表于 4个月前
古木阴中系短篷,杖藜扶我过桥东。沾衣欲湿杏花雨,吹面不寒杨柳风。