系统表
AntDB 系统表参见如下表格:
pg_aggregate
目录 pg_aggregate
存储关于聚集函数的信息。聚集函数是对一个数值集合(典型的是每个匹配查询条件的行中的同一个列的值) 进行操作的函数,它返回从这些值中计算出的一个数值。 典型的聚集函数是 sum
、count
和 max
。pg_aggregate
里的每个项都是一个 pg_proc
项的扩展。pg_proc
项记载该聚集的名字、输入和输出数据类型,以及其他一些和普通函数类似的信息。
列类型描述 |
---|
aggfnoid regproc (references pg_proc .oid )聚集函数的 pg_proc OID |
aggkind char Aggregate kind: n 表示 “普通” 聚集, o 表示 “有序集” 聚集, 或 h 表示 “假想集” 聚集 |
aggnumdirectargs int2 一个有序集或者假想集聚集的直接(非聚集)参数的数量,一个可变数组算作一个参数。 如果等于pronargs ,该聚集必定是可变的并且该可变数组描述聚集参数以及最终直接参数。对于普通聚集总是为零。 |
aggtransfn regproc (references pg_proc .oid )转移函数 |
aggfinalfn regproc (references pg_proc .oid )最终函数(如果没有就为零) |
aggcombinefn regproc (references pg_proc .oid )结合函数(如果没有就为零) |
aggserialfn regproc (references pg_proc .oid )序列化函数(如果没有就为零) |
aggdeserialfn regproc (references pg_proc .oid )反序列化函数(如果没有就为零) |
aggmtransfn regproc (references pg_proc .oid )用于移动聚集模式的向前转移函数(如果没有就为零) |
aggminvtransfn regproc (references pg_proc .oid )用于移动聚集模式的反向转移函数(如果没有就为零) |
aggmfinalfn regproc (references pg_proc .oid )用于移动聚集模式的最终函数(如果没有就为零) |
aggfinalextra bool True 将传递额外的虚拟参数到 aggfinalfn |
aggmfinalextra bool True 将传递额外的虚拟参数到 aggmfinalfn |
aggfinalmodify char``aggfinalfn 是否修改传递状态值: 如果是只读则为 r , 如果不能在 aggfinalfn 之后应用 aggtransfn 则为 s , 或者如果它修改该值则为 w |
aggmfinalmodify char 和 aggfinalmodify 类似,但是用于 aggmfinalfn |
aggsortop oid (references pg_operator .oid )相关联的排序操作符(如果没有则为 0) |
aggtranstype oid (references pg_type .oid )聚集函数的内部转移(状态)数据的数据类型 |
aggtransspace int4 转移状态数据的近似平均尺寸(字节),或者为零表示使用一个默认估算值 |
aggmtranstype oid (references pg_type .oid )聚集函数用于移动聚集欧氏的内部转移(状态)数据的数据类型(如果没有则为零) |
aggmtransspace int4 移动聚合模式的转移状态数据的近似平均尺寸(字节),或者为零表示使用一个默认估算值 |
agginitval text 转移状态的初始值。这是一个文本域,它包含初始值的外部字符串表现形式。如果这个域为空,则转移状态值从空值开始。 |
aggminitval text 用于移动聚集模式的转移状态初值。这是一个文本域,它包含了以其文本字符串形式表达的初值。 如果这个域为空,则转移状态值从空值开始。 |
pg_am
目录 pg_am
存储关于关系访问方法的信息。系统支持的每种访问方法在这个目录中都有一行。目前只有表和索引拥有访问方法。
类类型描述 |
---|
oid oid 行标识符 |
amname name 访问方法的名字 |
amhandler regproc (references pg_proc .oid )负责提供有关该访问方法信息的处理器函数的 OID |
amtype char``t = 表(包括物化视图), i = 索引. |
pg_amop
目录 pg_amop
存储关于与访问方法操作符族相关的操作符信息。对于一个操作符族中的每一个成员即操作符都在这个目录中有一行。一个成员可以是一个搜索操作符或者一个排序操作符。一个操作符可以出现在多个族中,但在同一个组中既不能出现在多个搜索位置也不能出现在多个排序位置(虽然不太可能出现,但是允许一个操作符同时用于搜索和排序目的)。
列类型描述 |
---|
oid oid 行标识符 |
amopfamily oid (references pg_opfamily .oid )这个项所在的操作符系列 |
amoplefttype oid (references pg_type .oid )操作符的左手输入数据类型 |
amoprighttype oid (references pg_type .oid )操作符的右手输入数据类型 |
amopstrategy int2 操作符策略号 |
amoppurpose char 操作符目的,s 表示搜索,o 表示排序 |
amopopr oid (references pg_operator .oid )操作符的 OID |
amopmethod oid (references pg_am .oid )使用此操作符系列的索引访问方法 |
amopsortfamily oid (references pg_opfamily .oid )如果是一个排序操作符,该项会根据这个 B 树操作符族排序,如果是一个搜索操作符则为 0 |
一个“搜索”操作符项意味着该操作符族的一个索引可以被搜索来查找所有满足如下条件的行: WHERE
indexed_column
operator
constant
。 显然,这样的一个操作符必须返回 boolean
,且它的左手输入类型必须匹配索引列的数据类型。
一个“排序”操作符项意味着该操作符族的一个索引可以被扫描来返回以如下顺序排列的行: ORDER BY
indexed_column
operator
constant
。 这样一个操作符能够返回任何可排序数据类型,尽管它的左手输入类型必须匹配索引列的数据类型。 ORDER BY
的准确语义由 amopsortfamily
列指定,它必须引用一个适合于操作符结果类型的B树操作符族。
pg_amproc
目录 pg_amproc
存储关于访问方法操作符族相关的支持函数。属于一个操作符族的每一个支持函数在这个目录中都有一行。
列类型描述 |
---|
oid oid 行标识符 |
amprocfamily oid (references pg_opfamily .oid )使用这个项的操作符系列 |
amproclefttype oid (references pg_type .oid )相关操作符的左手输入数据类型 |
amprocrighttype oid (references pg_type .oid )相关操作符的右手输入数据类型 |
amprocnum int2 支持的函数编号 |
amproc regproc (references pg_proc .oid )函数的 OID |
amproclefttype
和 amprocrighttype
列的通常解释是它们标识了一个特定支持过程所支持的操作符的左右输入类型。对于某些访问方法它们和支持过程本身的输入数据类型相匹配,而对其他的则不会匹配。对于一个索引有一个“默认”支持过程的概念,这些支持过程的amproclefttype
和 amprocrighttype
都等于索引操作符类的 opcintype
。
pg_attrdef
pg_attrdef
存储列的默认值。列的主要信息存储在 pg_attribute
。只有那些显式指定了一个默认值的列才会在这个目录中有一个项。
列类型描述 |
---|
oid oid 行标识符 |
adrelid oid (references pg_class .oid )该列所属的表 |
adnum int2 (references pg_attribute .attnum )列的编号 |
adbin pg_node_tree 列的默认值,以 nodeToString() 表示。用 pg_get_expr(adbin, adrelid) 将其转换为 SQL 表达式。 |
pg_attribute
目录 pg_attribute
存储有关表列的信息。数据库中的每一个表的每一个列都恰好在 pg_attribute
中有一行。(这其中也会有索引的属性项,并且事实上所有具有 pg_class
项的对象在这里都有属性项)
术语属性等同于列,这里使用它只是出于历史原因。
列类型描述 |
---|
attrelid oid (references pg_class .oid )此列所属的表 |
attname name 列名称 |
atttypid oid (references pg_type .oid )此列的数据类型 |
attstattarget int4``attstattarget 控制由 ANALYZE 对此列收集的统计信息的细节层次。 0 值表示不会收集任何统计信息。一个负值则说明直接使用系统默认的目标。正值的确切含义取决于数据类型。 对于标量数据类型,attstattarget 既是要收集的“最常见值”的目标号,也是要创建的柱状图容器的目标号。 |
attlen int2 本列类型的 pg_type.typlen 一个拷贝 type |
attnum int2 列的编号。一般列从 1 开始向上编号。系统列,如 ctid ,则拥有(任意)负值编号。 |
attndims int4 如果该列是一个数组类型,这里就是其维度数;否则为 0。 (在目前一个数组的维度数并不被强制,因此任何非零值都能有效地表明“这是一个数组”。) |
attcacheoff int4 在存储中总是为 -1,但是当被载入到一个内存中的行描述符后,这里可能会被更新为属性在行内的偏移 |
atttypmod int4``atttypmod 记录了在表创建时提供的类型相关数据(例如一个 varchar 列的最大长度)。 它会被传递给类型相关的输入函数和长度强制函数。对于那些不需要 atttypmod 的类型,这个值通常总是为 -1。 |
attbyval bool 该列类型的 pg_type.typbyval 的一个拷贝 |
attstorage char 通常是该列类型的 pg_type.typstorage 的一个拷贝。 对于可 TOAST 的数据类型,这可以在列创建后被修改以控制存储策略。 |
attalign char 该列类型的 pg_type.typalign 的一个拷贝 |
attnotnull bool 这表示一个非空约束。 |
atthasdef bool 该列有一个默认表达式或生成的表达式,在此情况下在 pg_attrdef 目录中会有一个对应项来真正定义该表达式。 (检查 attgenerated 以确定是默认还是生成的表达式。) |
atthasmissing bool 该列在行中完全缺失时会用到这个列的值,如果在行创建之后增加一个有非易失 DEFAULT 值的列,就会发生这种情况。 实际使用的值被存放在 attmissingval 列中。 |
attidentity char 如果是一个零字节('' ),则不是一个标识列。 否则,a = 总是生成,d = 默认生成。 |
attgenerated char 如果为零字节('' ),则不是生成的列。否则,s = stored。(将来可能会添加其他值。) |
attisdropped bool 该列被删除且不再有效。一个删除的列仍然物理存在于表中,但是会被分析器忽略并因此无法通过 SQL 访问。 |
attislocal bool 该列是由关系本地定义的。注意一个列可以同时是本地定义和继承的。 |
attinhcount int4 该列的直接祖先的编号。一个具有非零编号祖先的列不能被删除或者重命名。 |
attcollation oid (references pg_collation .oid )该列被定义的排序规则,如果该列不是一个可排序数据类型则为 0。 |
attacl aclitem[] 列级访问权限, 如果此列上已有特别授予的权限 |
attoptions text[] 属性级选项,以“keyword=value”形式的字符串 |
attfdwoptions text[] 属性级的外部数据包装器选项,以“keyword=value”形式的字符串 |
attmissingval anyarray 这个列中是一个含有一个元素的数组,其中的值被用于该列在行中完全缺失时,如果在行创建之后增加一个有非易失 DEFAULT 值的列,就会发生这种情况。 只有当 atthasmissing 为真时才使用这个值。如果没有值则该列为空。 |
在一个被删除的列的 pg_attribute
的项中,atttypid
被重置为 0,但 attlen
以及其他从 pg_type
拷贝的域仍然有效。这种安排用于处理一种情况,即被删除列的数据类型后来被删除,并且因此不再有相应的 pg_type
行。attlen
和其他域可以被用来解释表的一行的内容。
pg_authid
目录 pg_authid
包含关于数据库授权标识符(角色)的信息。角色把“用户”和“组”的概念包含在内。一个用户实际上就是一个rolcanlogin
标志被设置的角色。任何角色(不管 rolcanlogin
设置与否)都能够把其他角色作为成员。
由于这个目录包含口令,它不能是公共可读的。pg_roles
是在 pg_authid
上的一个公共可读视图,它隐去了口令域。
由于用户标识符是集簇范围的,pg_authid
在一个集簇的所有数据库之间共享:在一个集簇中只有一份 pg_authid
拷贝,而不是每个数据库一份。
列类型描述 |
---|
oid oid 行标识符 |
rolname name 角色名 |
rolsuper bool 角色有超级用户权限 |
rolinherit bool 如果本角色是另一个角色的成员,本角色是否自动另一个角色的权限 |
rolcreaterole bool 角色能创建更多角色 |
rolcreatedb bool 角色能创建数据库 |
rolcanlogin bool 角色是否能登录。即该角色是否能够作为初始会话授权标识符 |
rolreplication bool 角色是一个复制角色。复制角色可以启动复制连接并且创建和删除复制槽。 |
rolbypassrls bool 角色是否可以绕过所有的行级安全性策略,详见第 5.8 节。 |
rolconnlimit int4 对于可以登录的角色,本列设置该角色可以同时发起最大连接数。-1 表示无限制。 |
rolpassword text 密码(可能被加密过),如果没有口令则为空。格式取决于使用的加密方法的形式。 |
rolvaliduntil timestamptz 口令过期时间(只用于口令鉴定),如果永不过期则为空 |
对于一个 MD5 加密的口令,rolpassword
列将由字符串 md5
后面跟上一个 32 字符的十六进制 MD5 哈希值构成。MD5 哈希值将是该用户的口令串接上它们的用户名。例如,如果用户 joe
的口令是 xyzzy
,则 AntDB 将存储 xyzzyjoe
的 md5 哈希。
如果口令采用 SCRAM-SHA-256 加密,它的格式是:
SCRAM-SHA-256$<iteration count>:<salt>$<StoredKey>:<ServerKey>
其中 salt
、StoredKey
和 ServerKey
是 Base64 编码格式。这种格式与 RFC 5803 说明的格式相同。
不遵守上述格式的口令被假定为未加密。
pg_auth_members
目录 pg_auth_members
展示了角色之间的成员关系。允许任何无环的关系集合。
由于用户标识符是集簇范围的,pg_auth_members
在一个集簇的所有数据库之间共享:在一个集簇中只有一份 pg_auth_members
拷贝,而不是每个数据库一份。
列类型描述 |
---|
roleid oid (references pg_authid .oid )拥有成员的角色的 ID |
member oid (references pg_authid .oid )roleid 的成员角色的 ID |
grantor oid (references pg_authid .oid )授权此成员关系的角色的 ID |
admin_option bool 如果 member 能把 roleid 的成员关系授予他人,则为真(True) |
pg_cast
目录 pg_cast
存储数据类型转换路径,包括内建的和用户定义的类型。
需要注意的是,pg_cast
并不表示系统知道如何执行的所有类型转换,它只包括哪些不能从某些普通规则推导出的转换。例如,一个域及其基类型之间的转换并未显式地在 pg_cast
中展示。另一个重要的例外是“自动 I/O 转换造型”,它们通过数据类型自己的 I/O 函数来转换成(或者转换自)text
或其他字符串类型,这些转换也没有显式地在 pg_cast
中表示。
列类型描述 |
---|
oid oid 行标识符 |
castsource oid (references pg_type .oid )源数据类型的 OID |
casttarget oid (references pg_type .oid )目标数据类型的 OID |
castfunc oid (references pg_proc .oid )执行该转换的函数的 OID。如果该转换方法不需要一个函数则存储 0。 |
castcontext char 指示该转换能被调用的环境。 e 表示仅能作为一个显式转换(使用CAST 或:: 语法)。 a 表示在赋值给目标列时隐式调用, 和显式调用一样。 i 表示在表达式中隐式调用,和其他转换一样。 |
castmethod char 指示转换如何被执行。 f 表明使用 castfunc 中指定的函数。 i 表明使用输入/输出函数。 b 表明该类型是二进制可转换的,因此不需要转换。 |
在 pg_cast
里列出的类型转换函数必须总是以转换的源类型作为它的第一个参数类型, 并且返回转换的目标类型作为它的结果类型。一个类型转换函数最多有三个参数。 如果出现了第二个参数,必须是 integer
类型;它接受与目标类型关联的修饰词, 如果没有,就是 -1。如果出现了第三个参数,那么必须是 boolean
类型; 如果该类型转换是一种明确的转换,那么它接受 true
,否则接受 false
。
在 pg_cast
里创建一条源类型和目标类型相同的记录是合理的, 只要相关联的函数接受多过一个参数。这样的记录代表“长度转换函数”, 它们把该类型的值转换为对特定的类型合法的值。
如果一个 pg_cast
的项有着不同的原类型和目标类型, 并且有一个接收多于一个参数的函数,那么它会在一个步骤中完成从一种类型到另外一种类型的转换并应用一个长度转换。如果没有这样的项,使用一个类型修改器的转换涉及两个步骤, 一个是在数据类型之间转换,另外一个是应用修改器。
pg_class
目录 pg_class
记录表和几乎所有具有列或者像表的东西。这包括索引、序列、视图、物化视图、组合类型和TOAST表。下面,当提及所有这些类型的对象时使用“关系”。并非所有列对于所有关系类型都有意义。
列类型描述 |
---|
oid oid 行标识符 |
relname name 表、索引、视图等的名字 |
relnamespace oid (references pg_namespace .oid )包含该关系的名字空间的 OID |
reltype oid (references pg_type .oid )可能存在的表行类型所对应数据类型的 OID(对索引为 0,索引没有 pg_type 项) |
reloftype oid (references pg_type .oid )对于有类型的表,为底层组合类型的 OID,对于其他所有关系为 0 |
relowner oid (references pg_authid .oid )关系的拥有者 |
relam oid (references pg_am .oid )如果这是一个表或者索引,表示索引使用的访问方法(堆、B 树、哈希等) |
relfilenode oid 该关系的磁盘文件的名字,0 表示这是一个“映射”关系,其磁盘文件名取决于低层状态 |
reltablespace oid (references pg_tablespace .oid )该关系所存储的表空间。如果为 0,使用数据库的默认表空间。(如果关系无磁盘文件时无意义) |
relpages int4 该表磁盘表示的尺寸,以页面计(页面尺寸为 BLCKSZ )。这只是一个由规划器使用的估计值。 它被 VACUUM 、ANALYZE 以及一些 DDL 命令(如 CREATE INDEX )所更新。 |
reltuples float4 表中的存活行数。这只是一个由规划器使用的估计值。 它被 VACUUM 、ANALYZE 以及一些 DDL 命令(如 CREATE INDEX )所更新。 |
relallvisible int4 在表的可见性映射表中被标记为全可见的页数。这只是一个由规划器使用的估计值。 它被 VACUUM 、ANALYZE 以及一些 DDL 命令(如 CREATE INDEX )所更新。 |
reltoastrelid oid )与该表相关联的 TOAST 表的 OID,如果没有则为 0。TOAST 表将大属性“线外”存储在一个二级表中。 |
relhasindex bool 如果这是一个表并且其上建有(或最近建有)索引则为真 |
relisshared bool 如果该表在集簇中的所有数据库间共享则为真。只有某些系统目录(如 pg_database )是共享的。 |
relpersistence char``p = 永久表,u = 无日志表, t = 临时表 |
relkind char``r = 普通表, i = 索引, S = 序列, t = TOAST表, v = 视图, m = 物化视图, c = 组合类型, f = 外部表, p = 分区表, I = 分区索引 |
relnatts int2 关系中用户列的数目(系统列不计算在内)。在 pg_attribute 中必须有这么多对应的项。 另请参阅 pg_attribute.attnum 。 |
relchecks int2 表上 CHECK 约束的数目 |
relhasrules bool 如果表有(或曾有)规则则为真 |
relhastriggers bool 如果表有(或曾有)触发器则为真 |
relhassubclass bool 如果表或索引具有(或曾经具有)任何继承子项,则为真(True) |
relrowsecurity bool 如果表上启用了行级安全性则为真 |
relforcerowsecurity bool 如果行级安全性(启用时)也适用于表拥有者则为真 |
relispopulated bool 如果表已被填充则为真(对于所有关系该列都为真,但对于某些物化视图却不是) |
relreplident char 用来为行形成“replica identity”的列: d = 默认 (主键,如果存在), n = 无, f = 所有列 i = 索引的 indisreplident 被设置或者为默认 |
relispartition bool 如果表或索引是一个分区,则为真 |
relrewrite oid (references pg_class .oid )对于在要求表重写的 DDL 操作期间被写入的新关系,这个域包含原始关系的 OID,否则为 0。 那种状态仅在内部可见,对于一个用户可见的关系这个域应该从不包含不是 0 的值。 |
relfrozenxid xid 在此之前的所有事务 ID 在表中已经被替换为一个永久的(“冻结的”) 事务 ID。 这用于跟踪表是否需要被清理,以便阻止事务 ID 回卷或者允许 pg_xact 被收缩。 如果该关系不是一个表则为 0(InvalidTransactionId )。 |
relminmxid xid 在此之前的多事务 ID 在表中已经被替换为一个事务 ID。这被用于跟踪表是否需要被清理,以阻止 多事务ID回卷或者允许 pg_multixact 被收缩。如果关系不是一个表则为 0(InvalidMultiXactId )。 |
relacl aclitem[] 访问权限 |
reloptions text[] 访问方法相关的选项,以“keyword=value”字符串形式 |
relpartbound pg_node_tree 如果表示一个分区(见 relispartition ),分区边界的内部表达 |
pg_class
中的一些逻辑标志被以一种懒惰的方式维护:在正确状态时它们被保证为真,但是当条件不再为真时它们并不会被立刻重置为假。例如,relhasindex
由 CREATE INDEX
设置,但它从不会被 DROP INDEX
清除。作为替代,VACUUM
会在找到无索引表后清除其 relhasindex
。这种安排避免了竞争条件并且提高了并发性。
pg_collation
目录 pg_collation
描述了可用的排序规则,其本质是从一个 SQL 名字到操作系统 locale 分类的映射。
列类型描述 |
---|
oid oid 行标识符 |
collname name 排序规则名字(在每一个名字空间和编码中唯一) |
collnamespace oid (references pg_namespace .oid )包含该排序规则的名字空间的 OID |
collowner oid (references pg_authid .oid )排序规则的拥有者 |
collprovider char 排序规则的提供者:d = 数据库默认,c = libc,i = icu |
collisdeterministic bool 排序规则是确定性的吗? |
collencoding int4 该排序规则可应用的编码,或以 -1 表示它可用于任何编码 |
collcollate name 该排序规则对象的 LC_COLLATE |
collctype name 该排序规则对象的 LC_CTYPE |
collversion text 排序规则的提供者相关的版本。这是在排序规则创建时记录下来的,并且在使用排序规则时会被检查以检测可能导致数据损坏的排序规则定义的改变。 |
注意在这个目录中的唯一键是(collname
、 collencoding
、 collnamespace
), 不仅仅是(collname
,collnamespace
)。 所有collencoding
不等于当前数据库编码或 -1 的编码规则通常都会被 AntDB 忽略,且禁止创建和 collencoding
= -1 的项重名的项。因此使用一个受限的 SQL 名字(schema
.name
)来标识一个排序规则是足够的,即使这根据目录定义是不唯一的。以这种方式定义这个目录的原因是 initdb 会在集簇初始化时使用系统上所有可用的 locale 填充这个目录,所以它必须能够为所有可能在集簇中使用的编码保持项。
在 template0
数据库中,创建与数据库编码不匹配的编码是有用的,因为它们可以匹配后面从 template0
克隆的数据库的编码。这在目前必须手动完成。
pg_constraint
目录 pg_constraint
存储表上的检查、主键、唯一、外键和排他约束(列约束也不会被特殊对待。每一个列约束都等同于某种表约束。)。非空约束不在这里,而是在 pg_attribute
目录中表示。
用户定义的约束触发器(使用 CREATE CONSTRAINT TRIGGER
创建)也会在这个表中产生一项。
域上的检查约束也存储在这里。
列类型描述 |
---|
oid oid 行标识符 |
conname name 约束名字(不需要唯一!) |
connamespace oid (references pg_namespace .oid )包含此约束的名字空间的 OID |
contype char``c = 检查约束, f = 外键约束, p = 主键约束, u = 唯一约束, t = 约束触发器, x = 排他约束 |
condeferrable bool 该约束是否能被延迟? |
condeferred bool 该约束是否默认被延迟? |
convalidated bool 此约束是否被验证过?当前对于外键和检查约束只能是假 |
conrelid oid (references pg_class .oid )该约束所在的表,如果不是表约束则为 0 |
contypid oid (references pg_type .oid )该约束所在的域,如果不是域约束则为 0 |
conindid oid (references pg_class .oid )如果该约束是唯一、主键、外键或排他约束,此列表示支持此约束的索引,否则为 0 |
conparentid oid (references pg_constraint .oid )如果这是一个分区中的约束,则是父分区表中对应的约束;否则为 0 |
confrelid oid (references pg_class .oid )如果此约束是一个外键约束,此列为被引用的表,否则为 0 |
confupdtype char 外键更新动作代码: a = 无动作, r = 限制, c = 级联, n = 置空, d = 置为默认值 |
confdeltype char 外键删除动作代码: a = 无动作, r = 限制, c = 级联, n = 置空, d = 置为默认值 |
confmatchtype char 外键匹配类型: f = 完全, p = 部分, s = 简单 |
conislocal bool 此约束是定义在关系本地。注意一个约束可以同时是本地定义和继承。 |
coninhcount int4 此约束的直接继承祖先数目。一个此列非零的约束不能被删除或重命名。 |
connoinherit bool 为真表示此约束被定义在关系本地。它是一个不可继承约束。 |
conkey int2[] (references pg_attribute .attnum )如果是一个表约束(包括外键但不包括约束触发器),此列是被约束列的列表 |
confkey int2[] (references pg_attribute .attnum )如果是一个外键,此列是被引用列的列表 |
conpfeqop oid[] (references pg_operator .oid )如果是一个外键,此列是用于 PK = FK 比较的等值操作符的列表 |
conppeqop oid[] (references pg_operator .oid )如果是一个外键,此列是用于 PK = PK 比较的等值操作符的列表 |
conffeqop oid[] (references pg_operator .oid )如果是一个外键,此列是用于 FK = FK 比较的等值操作符的列表 |
conexclop oid[] (references pg_operator .oid )如果是一个排他约束,此列是每列排他操作符的列表 |
conbin pg_node_tree 如果是一个检查约束,此列是表达式的一个内部表示。建议使用 pg_get_constraintdef() 提取检查约束的定义。 |
在一个排他约束的情况中, conkey
只对约束元素是单一列引用时有用。对于其他情况,conkey
为 0 且必须查阅相关索引来发现被约束的表达式(conkey
因此和 pg_index
.indkey
具有相同的内容)。
pg_conversion
目录 pg_conversion
描述编码转换函数。
列类型描述 |
---|
oid oid 行标识符 |
conname name 转换的名字(在一个名字空间内唯一) |
connamespace oid (references pg_namespace .oid )包含此转换的名字空间的 OID |
conowner oid (references pg_authid .oid )转换的拥有者 |
conforencoding int4 源编码 ID |
contoencoding int4 目标编码 ID |
conproc regproc (references pg_proc .oid )转换函数 |
condefault bool 如果这是默认转换则为真 |
pg_database
目录 pg_database
存储有关可用数据库的信息。数据库通过 CREATE DATABASE 命令创建。
和大部分系统目录不同,pg_database
是在集簇的所有数据库之间共享的:在一个集簇中只有一份 pg_database
拷贝,而不是每个数据库一份。
列类型描述 |
---|
oid oid 行标识符 |
datname name 数据库名称 |
datdba oid (references pg_authid .oid )数据库的拥有者,通常是创建它的用户 |
encoding int4 此数据库的字符编码的编号(pg_encoding_to_char() 可将此编号转换成编码的名字) |
datcollate name 此数据库的 LC_COLLATE |
datctype name 此数据库的 LC_CTYPE |
datistemplate bool 如果为真,则此数据库可被任何具有 CREATEDB 权限的用户克隆; 如果为假,则只有超级用户或者该数据库的属主能够克隆它。 |
datallowconn bool 如果为假则没有人能连接到这个数据库。这可以用来保护 template0 数据库不被修改。 |
datconnlimit int4 设置能够连接到这个数据库的最大并发连接数。-1 表示没有限制。 |
datlastsysoid oid 数据库中最后一个系统 OID,对 adb_dump 特别有用 |
datfrozenxid xid 在此之前的所有事务 ID 在数据库中已经被替换为一个永久的(“冻结的”) 事务 ID。 这用于跟踪数据库是否需要被清理,以便组织事务 ID 回环或者允许 pg_xact 被收缩。 它是此数据库中所有表的 pg_class .relfrozenxid 值的最小值。 |
datminmxid xid 在此之前的所有多事务 ID 在数据库中已经被替换为一个事务ID。这用于跟踪数据库是否需要被清理,以便组织事务ID回环或者允许pg_multixact 被收缩。它是此数据库中 所有表的 pg_class .relminmxid 值的最小值。 |
dattablespace oid (references pg_tablespace .oid )此数据库的默认表空间。在此数据库中,所有 pg_class .reltablespace 为 0 的表都将被存储在这个表空间中,尤其是非共享系统目录都会在其中。 |
datacl aclitem[] 访问权限 |
pg_db_role_setting
目录 pg_db_role_setting
为每一个角色和数据库组合记录被设置到运行时配置变量的默认值。
和大部分系统目录不同,pg_db_role_setting
是在集簇的所有数据库之间共享的:在一个集簇中只有一份 pg_db_role_setting
拷贝,而不是每个数据库一份。
列类型描述 |
---|
setdatabase oid (references pg_database .oid )此设置可用的数据库 OID,如果不与具体数据库相关则为 0 |
setrole oid (references pg_authid .oid )此设置可用的角色 OID,如果不与具体角色相关则为 0 |
setconfig text[] 运行时配置变量的默认值 |
pg_default_acl
目录 pg_default_acl
存储要被分配给新创建对象的初始权限。
列类型描述 |
---|
oid oid 行标识符 |
defaclrole oid (references pg_authid .oid )与此项相关的角色的 OID |
defaclnamespace oid (references pg_namespace .oid )与此项相关的名字空间的 OID,如果没有则为 0 |
defaclobjtype char 此项适合的对象类型: r = 关系(表、视图), S = 序列, f = 函数, T = 类型, n = 模式 |
defaclacl aclitem[] 此类对象在创建时应用有的访问权限 |
一个 pg_default_acl
项展示了要分配给属于一个指定用户的对象的初始权限。当前有两类项:defaclnamespace
= 0 的“全局”项和引用一个特殊模式的“每方案”项。如果一个全局项存在,则它重载该对象类型的普通 hard-wired 默认权限。一个每模式项如果存在,表示权限将被加入到全局或 hard-wired 默认权限中。
注意当在另一个表中的一个 ACL 项为空时,它用来表示其对象的 hard-wired 默认权限,而不是当时可能在 pg_default_acl
中的任何权限。只有在对象创建期间才会查阅 pg_default_acl
。
pg_depend
目录 pg_depend
记录数据库对象之间的依赖关系。这些信息允许 DROP
命令查找必须被 DROP CASCADE
删除的其他对象,或者在 DROP RESTRICT
情况下阻止删除。
另请参阅 pg_shdepend
,它对在一个数据库集簇中共享的对象之间的依赖提供了相似的功能。
列类型描述 |
---|
classid oid (references pg_class .oid )依赖对象所在的系统目录 OID |
objid oid (references any OID column)指定依赖对象的 OID |
objsubid int4 对于一个表列,这里是列号(objid 和 classid 指表本身)。对于所有其他对象类型,此列为 0。 |
refclassid oid (references pg_class .oid )被引用对象所在的系统目录的 OID |
refobjid oid (references any OID column)指定被引用对象的 OID |
refobjsubid int4 对于一个表列,这里是列号(refobjid 和 refclassid 指表本身)。对于所有其他对象类型,此列为 0。 |
deptype char 定义此依赖关系语义的一个代码,见文本 |
在所有情况下,一个 pg_depend
项表明被引用对象不能在没有删除其依赖对象的情况下被删除。但是,其中也有多种依赖类型,由deptype
标识:
-
DEPENDENCY_NORMAL
(n
)在独立创建的对象之间的一个普通关系。依赖对象可以在不影响被依赖对象的情况下被删除。被引用对象只能通过指定
CASCADE
被删除,在这种情况下依赖对象也会被删除。 例子:一个表列对于其数据类型有一个普通依赖。 -
DEPENDENCY_AUTO
(a
)依赖对象可以被独立于被依赖对象删除,且应该在被引用对象被删除时自动被删除(不管在
RESTRICT
或CASCADE
模式)。例子:一个表上的一个命名约束应该被设置为自动依赖于表,这样在表被删除后它也会消失。 -
DEPENDENCY_INTERNAL
(i
)依赖对象作为被引用对象创建过程的一部分被创建,并且只是其内部实现的一部分。不允许直接
DROP
所依赖的对象(而是告诉用户对引用对象发出DROP
操作)。无论是否指定了CASCADE
,DROP
被引用的对象都将导致自动删除从属对象。如果由于删除了对某些其他对象的依赖关系而不得不删除依赖对象,则其删除将转换为对所引用对象的删除,因此依赖对象的NORMAL
和AUTO
依赖关系的行为就像它们是所引用对象的依赖关系。示例:视图的ON SELECT
规则使其在内部依赖于视图,以防止在视图保留时将其删除。规则的依赖关系(例如它引用的表)就好像他们是视图的依赖关系。 -
DEPENDENCY_PARTITION_PRI
(P
)DEPENDENCY_PARTITION_SEC
(S
)依赖对象被作为被引用对象创建过程的一部分创建,并且确实是其内部实现的一部分。但是,不像
INTERNAL
,有多个这样的引用对象。除非删除了这些引用对象中的至少一个对象,否则不得删除依赖对象;如果其中任何一个被删除,则不管是否指定了CASCADE
,都应删除依赖对象。也不像INTERNAL
,依赖对象所依赖的某些其他对象的删除不会导致任何分区引用的对象的自动删除。因此,如果删除没有通过其他路径级联到这些对象中的至少一个,它会被拒绝。(大多数情况下,依赖对象与至少一个分区引用对象共享所有非分区的依赖关系,因此此限制不会导致阻止任何级联的删除。)主分区和辅助分区的依赖关系表现相同,除了主分区依赖关系倾向用于错误消息;因此,分区相关的对象应该有一个主分区依赖关系和一个或多个辅助分区依赖关系。注意到分区依赖关系是任何对象所正常拥有的依赖关系的补充,而不是替代。这简化了ATTACH/DETACH PARTITION
操作:只要添加或删除分区的依赖关系。例如:子分区索引与其所基于的分区表和父分区索引是分区相关的,因此只要其中一个删除,则子分区索引就消失,否则,就不消失。父索引上的依赖关系是主要的,故如果用户试图删除子分区索引,错误消息反而会建议删除父索引(不是表)。 -
DEPENDENCY_EXTENSION
(e
)依赖对象是作为扩展的被引用对象的一个成员。依赖对象可以通过被引用对象上的
DROP EXTENSION
来删除。在功能上,这种依赖类型和一个INTERNAL
依赖的作用相同,其存在只是为了清晰和简化 adb_dump。 -
DEPENDENCY_AUTO_EXTENSION
(x
)依赖对象不是作为被引用对象的扩展的成员(因此不应该被 adb_dump 忽略),但是没有该扩展它又无法工作,因此如果删除了扩展,则该依赖对象应自动删除。该依赖对象也可以独立删除。功能上,该依赖关系类型与
AUTO
依赖相同,但是为了清晰起见和简化 adb_dump,将其分开。 -
DEPENDENCY_PIN
(p
)没有依赖对象,这种类型的项是一个信号,用于说明系统本身依赖于被引用对象,并且该对象永远不能被删除。这种类型的项只能被
initdb
创建。而此种项的依赖对象的列都为 0。
在未来可能会需要其他依赖类型。
要注意的是,两个对象很有可能由不止一个 pg_depend
条目来链接。例如子分区索引有一个依赖于其关联的分区表的分区类型的依赖关系和依赖于该表索引的每一列的自动依赖关系。此类情形表示多重依赖关系语义的并集,依赖对象的删除可以没有 CASCADE
,如果其任一依赖关系满足自动删除的条件。相反地,关于哪些对象必须一起删除的所有依赖关系的限制必须满足。
pg_description
目录 pg_description
存储对每一个数据库对象可选的描述(注释)。描述可以通过 COMMENT 操作,并可使用adb的\d
命令查看。在 pg_description
的初始内容中提供了很多内建系统对象的描述。
列类型描述 |
---|
objoid oid (references any OID column)描述所属对象的 OID |
classoid oid (references pg_class .oid )对象所述的系统目录的 OID |
objsubid int4 对于一个表列上的一个注释,这里是列号(objoid 和 classoid 指表本身)。对所有其他对象类型,此列为 0。 |
description text 作为该对象描述的任意文本 |
pg_enum
pg_enum
目录包含每一个枚举类型的项,其中包括了值和标签。一个给定枚举值的内部表示实际上是它在 pg_enum
中的相关行的 OID。
列类型描述 |
---|
oid oid 行标识符 |
enumtypid oid (references pg_type .oid )包含此枚举值的 pg_type 项的 OID |
enumsortorder float4 此枚举值在其枚举类型中的排序位置 |
enumlabel name 此枚举值的文本标签 |
pg_enum
行的 OID 值遵循一种特殊的规则:即 OID 的数值被保证按照其枚举类型的排序顺序进行排序。即如果两个偶数 OID 属于同一枚举类型,较小的 OID 必然具有较小的 enumsortorder
值。奇数 OID 值不需要遵循排序顺序。这种规则使得枚举比较例程在很多常见情况下可以避免系统目录查找。创建和修改枚举类型的例程将尝试尽可能地为枚举值分配偶数 OID。
当一个枚举类型被创建后,其成员会被分配排序位置 1..n
。但后面增加的成员可能会被分配负值或者分数值的 enumsortorder
。对于这些值的唯一要求是它们必须被正确地排序且和保持唯一。
pg_event_trigger
目录 pg_event_trigger
存储事件触发器。
列类型描述 |
---|
oid oid 行标识符 |
evtname name 触发器名(必须唯一) |
evtevent name 此触发器触发的事件的标识符 |
evtowner oid (references pg_authid .oid )事件触发器的拥有者 |
evtfoid oid (references pg_proc .oid )将被调用的函数 |
evtenabled char 控制事件触发器触发的 session_replication_role 模式。 O = 触发器在“origin”和“local”模式触发, D = 触发器被禁用, R = 触发器在“replica”模式触发, A = 触发器总是触发。 |
evttags text[] 此触发器将触发的命令标签。如果为空,此触发器的触发不受命令标签的限制。 |
pg_extension
目录 pg_extension
存储有关已安装扩展的信息。
表 51.22. pg_extension
Columns
列类型描述 |
---|
oid oid 行标识符 |
extname name 扩展的名字 |
extowner oid (references pg_authid .oid )扩展的拥有者 |
extnamespace oid (references pg_namespace .oid )包含此扩展的导出对象的模式 |
extrelocatable bool 如果扩展可被重定位到另一个模式则为真 |
extversion text 扩展的版本名字 |
extconfig oid[] (references pg_class .oid )扩展的配置表的 regclass 项的 OID 数组,如果没有配置表则为 NULL |
extcondition text[] 扩展的配置表的 WHERE 子句过滤条件的数组,如果没有则为 NULL |
注意和大部分具有一个“namespace”列的模式不同,extnamespace
不是用来表示扩展属于该模式。扩展的名字从不用模式进行限定。extnamespace
表明该模式包含了该扩展的大部分或全部对象。如果 extrelocatable
为真,则该模式事实上必须包含属于此扩展的全部模式限定的对象。
pg_foreign_data_wrapper
目录 pg_foreign_data_wrapper
存储外部数据包装器定义。外部数据包装器是一种访问位于外部服务器上数据的机制。
列类型描述 |
---|
oid oid 行标识符 |
fdwname name 外部数据包装器的名字 |
fdwowner oid (references pg_authid .oid )外部数据包装器的拥有者 |
fdwhandler oid (references pg_proc .oid )指一个负责为外部数据包装器提供执行例程的处理函数。如果没有提供处理函数则为 0 |
fdwvalidator oid (references pg_proc .oid )指一个负责检查传给外部数据包装器的选项的有效性的验证函数,包括外部服务器选项以及使用外部数据包装器的用户映射。如果没有提供验证函数则为 0 |
fdwacl aclitem[] 访问权限,详见第 5.7 节 |
fdwoptions text[] 外部数据包装器特定选项,以“keyword=value”字符串形式 |
pg_foreign_server
目录 pg_foreign_server
存储外部服务器定义。外部服务器定义了外部数据的来源,例如一个远程服务器。外部服务器通过外部数据包装器来访问。
列类型描述 |
---|
oid oid 行标识符 |
srvname name 外部服务器的名字 |
srvowner oid (references pg_authid .oid )外部服务器的拥有者 |
srvfdw oid (references pg_foreign_data_wrapper .oid )此外部服务器的外部数据包装器的 OID |
srvtype text 服务器的类型(可选) |
srvversion text 服务器的版本(可选) |
srvacl aclitem[] 访问权限 |
srvoptions text[] 外部服务器特定选项,以“keyword=value”字符串形式 |
pg_foreign_table
目录 pg_foreign_table
包含关于外部表的辅助信息。一个外部表和普通表一样,主要由一个 pg_class
项表示。它的 pg_foreign_table
项包含外部表所特有的信息。
列类型描述 |
---|
ftrelid oid (references pg_class .oid )外部表的 pg_class 项的 OID |
ftserver oid (references pg_foreign_server .oid )外部表所在的外部服务器的 OID |
ftoptions text[] 外部表选项,以“keyword=value”字符串形式 |
pg_index
目录 pg_index
包含关于索引的部分信息。其他信息大部分在 pg_class
中。
列类型描述 |
---|
indexrelid oid (references pg_class .oid )此索引的 pg_class 项的 OID |
indrelid oid (references pg_class .oid )此索引的基表的pg_class 项的 OID |
indnatts int2 索引中的总列数(与 pg_class.relnatts 重复),这个数目包括键和被包括的属性 |
indnkeyatts int2 索引中键列的编号,不计入任何的内含列,它们只是被存储但不参与索引的语义 |
indisunique bool 如为真, 这是唯一索引 |
indisprimary bool 如为真,表示索引为表的主键(如果此列为真,indisunique 也总是为真) |
indisexclusion bool 如为真,此索引支持一个排他约束 |
indimmediate bool 如为真,唯一性检查在插入时立即被执行(如果 indisunique 为假,此列无关) |
indisclustered bool 如果为真,表示表最后以此索引进行了聚簇 |
indisvalid bool 如果为真,此索引当前可以用于查询。为假表示此索引可能不完整:它肯定还在被 INSERT /UPDATE 操作所修改,但它不能安全地被用于查询。如果索引是唯一索引,唯一性属性也不能被保证。 |
indcheckxmin bool 如果为真,直到此 pg_index 行的 xmin 低于查询的 TransactionXmin 视界之前,查询都不能使用此索引,因为表可能包含具有它们可见的不相容行的损坏 HOT 链 |
indisready bool 如果为真,表示此索引当前可以用于插入。为假表示索引必须被 INSERT /UPDATE 操作忽略。 |
indislive bool 如果为假,索引正处于被删除过程中,并且必须被所有处理忽略(包括 HOT 安全的决策) |
indisreplident bool 如果为真,这个索引被选择为使用 ALTER TABLE ... REPLICA IDENTITY USING INDEX ... 的“replica identity” |
indkey int2vector (references pg_attribute .attnum )这是一个 indnatts 值的数组,它表示了此索引索引的表列。 例如一个 1 3 值可能表示表的第一和第三列组成了索引项。键列出现在非键(内含)列前面。 数组中的一个 0 表示对应的索引属性是一个在表列上的表达式,而不是一个简单的列引用。 |
indcollation oidvector (references pg_collation .oid )对于索引键(indnkeyatts 值)中的每一列,这包含要用于该索引的排序规则的 OID,如果该列不是一种可排序数据类型则为零。 |
indclass oidvector (references pg_opclass .oid )对于索引键中的每一列(indnkeyatts 值),这里包含了要使用的操作符类的 OID。详见 pg_opclass 。 |
indoption int2vector 这是一个 indnkeyatts 值的数组,用于存储每列的标志位。位的意义由索引的访问方法定义。 |
indexprs pg_node_tree 非简单列引用索引属性的表达式树(以 nodeToString() 形式)。对于 indkey 中每一个为 0 的项,这个列表中都有一个元素。如果所有的索引属性都是简单引用,此列为空。 |
indpred pg_node_tree 部分索引谓词的表达式树(以 nodeToString() 形式)。如果不是部分索引,此列为空。 |
pg_inherits
目录 pg_inherits
记录有关表和索引的继承层次的信息。数据库中每一个直接父子表和索引关系在这里都有一项(非直接继承可以通过顺着项构成的链来决定)。
列类型描述 |
---|
inhrelid oid (references pg_class .oid )子表或索引的 OID |
inhparent oid (references pg_class .oid )父表或索引的 OID |
inhseqno int4 如果一个孩子表有多于一个直接父表(多继承),这个数字说明了继承列被排列的顺序。计数从 1 开始。索引不能具有多个继承,因为它们只能在使用声明性分区时继承。 |
pg_init_privs
目录 pg_init_privs
记录系统中对象的初始权限。数据库中每一个具有非默认(非-NULL)初始权限集合的对象都有一个条目在其中。
对象可以在系统初始化(initdb)时获得其初始权限,也可以在 CREATE EXTENSION
期间创建该对象并且在扩展脚本中用 GRANT
来设置对象的初始权限。注意系统将自动处理扩展脚本执行期间对权限的记录,扩展的作者们只需要在他们的脚本中使用 GRANT
以及 REVOKE
语句以便权限被记录下来。privtype
列表示初始权限是被 initdb 设置还是在一次 CREATE EXTENSION
命令期间被设置。
具有被 initdb 设置的初始权限的对象的条目中 privtype
是 'i'
,而具有被 CREATE EXTENSION
设置的初始权限的对象的条目中 privtype
为 'e'
。
列类型描述 |
---|
objoid oid (参考任何 OID 列)指定对象的 OID |
classoid oid (references pg_class .oid )对象所在的系统目录的 OID |
objsubid int4 对于一个表列,这里是列编号(objoid 和 classoid 指向表本身)。对于所有其他对象类型,这列为零。 |
privtype char 定义这个对象初始权限类型的代码,见文字说明 |
initprivs aclitem[] 初始的访问权限 |
pg_language
目录 pg_language
注册了可用于编写函数或存储过程的语言。
列类型描述 |
---|
oid oid 行标识符 |
lanname name 语言的名字 |
lanowner oid (references pg_authid .oid )语言的拥有者 |
lanispl bool 内部语言为假(如 SQL),用户定义语言为真。当前,adb_dump 仍然使用这个列来决定要转储哪些语言,但在未来这可能会被一种不同的机制所取代。 |
lanpltrusted bool 为真表示这是一种可信的语言,即它被相信不会向普通 SQL 执行环境之外的任何东西授予权限。只有超级用户可以在非可信语言中创建函数。 |
lanplcallfoid oid (references pg_proc .oid )对于非内部语言,此列引用语言处理器,它是一个特殊函数负责执行所有用这种语言编写的函数 |
laninline oid (references pg_proc .oid )此列引用一个负责执行“内联”匿名代码块的函数(DO 块)。如果不支持内联块则为 0。 |
lanvalidator oid (references pg_proc .oid )此列引用一个负责在函数创建时对其进行语法和可用性检查的语言验证函数。如果没有提供验证器则为 0。 |
lanacl aclitem[] 访问权限 |
pg_largeobject
目录 pg_largeobject
保存构成“大对象”的数据。一个大对象在被创建时会被分配一个 OID。每个大对象被分解成段或“页”,以便小到可以被方便地作为行存储在pg_largeobject
中。每页中的数据量被定义为 LOBLKSIZE
(目前是 BLCKSZ/4
或是 2 kB)。
在 AntDB 9.0 之前,大对象没有相关的权限结构。作为结果,pg_largeobject
是公共可读的并且可以用来获得系统中所有大对象的 OID(和内容)。但现在不是这样了,可使用pg_largeobject_metadata
来获得大对象 OID 的列表。
列类型描述 |
---|
loid oid (references pg_largeobject_metadata .oid )包含此页的大对象的标识符 |
pageno int4 此页在它所属大对象中的页号(从 0 开始计) |
data bytea 实际存储在大对象中的数据。它从不会超过 LOBLKSIZE 字节,也可能更少。 |
pg_largeobject
的每一行保存一个大对象的一个页的数据,从对象内部的字节偏移量(pageno * LOBLKSIZE
)开始。现在的实现允许稀疏存储:页面可能丢失,并且可能比 LOBLKSIZE
字节短(即便不是最后一页)。一个大对象中丢失的区域会被读出为 0。
pg_largeobject_metadata
目录 pg_largeobject_metadata
保持着与大对象有关的元数据。真正的大对象数据被存储在 pg_largeobject
中。
列类型描述 |
---|
oid oid 行标识符 |
lomowner oid (references pg_authid .oid )大对象的拥有者 |
lomacl aclitem[] 访问权限,详见第 5.7 节 |
pg_namespace
目录 pg_namespace
存储名字空间。名字空间是 SQL 模式之下的结构:每个名字空间拥有一个独立的表、类型等的集合,且其中没有名字冲突。
列类型描述 |
---|
oid oid 行标识符 |
nspname name 名字空间的名字 |
nspowner oid (references pg_authid .oid )名字空间的拥有者 |
nspacl aclitem[] 访问权限 |
pg_opclass
目录 pg_opclass
定义索引访问方法的操作符类。每一个操作符类定义了一种特定数据类型和一种特定索引访问方法的索引列的语义。一个操作符类实际上指定了一个特定的操作符族可以用于一个特定可索引列数据类型。该族中可用于索引列的操作符能够接受该列的数据类型作为它们的左输入。
列类型描述 |
---|
oid oid 行标识符 |
opcmethod oid (references pg_am .oid )操作符类所属的索引访问方法 |
opcname name 操作符类的名称 |
opcnamespace oid (references pg_namespace .oid )操作符类所属的名字空间 |
opcowner oid (references pg_authid .oid )操作符类的拥有者 |
opcfamily oid (references pg_opfamily .oid )包含此操作符类的操作符系列 |
opcintype oid (references pg_type .oid )操作符类索引的数据类型 |
opcdefault bool 如果此操作符类为 opcintype 的默认值则为真 |
opckeytype oid (references pg_type .oid )存储在索引中的数据的类型,如果值为 0 表示与 opcintype 相同 |
一个操作符类的 opcmethod
必须匹配包含它的操作符族的 opfmethod
。而且,对于任何给定的 opcmethod
和 opcintype
组合,只有不超过一个 pg_opclass
行的 opcdefault
值为真。
pg_operator
目录 pg_operator
存储关于操作符的信息。
列类型描述 |
---|
oid oid 行标识符 |
oprname name 操作符的名称 |
oprnamespace oid (references pg_namespace .oid )操作符所属的名字空间的 OID |
oprowner oid (references pg_authid .oid )操作符的拥有者 |
oprkind char``b = 中缀 (“并”), l = 前缀 (“左”), r = 后缀 (“右”) |
oprcanmerge bool 该操作符支持归并连接 |
oprcanhash bool 该操作符支持哈希连接 |
oprleft oid (references pg_type .oid )左操作数类型 |
oprright oid (references pg_type .oid )右操作数类型 |
oprresult oid (references pg_type .oid )结果类型 |
oprcom oid (references pg_operator .oid )该操作符的交换子(如果存在) |
oprnegate oid (references pg_operator .oid )该操作符的否定(如果存在) |
oprcode regproc (references pg_proc .oid )实现该操作符的函数 |
oprrest regproc (references pg_proc .oid )该操作符的限制选择度估算函数 |
oprjoin regproc (references pg_proc .oid )该操作符的连接选择度估算函数 |
未用的列包含零值。例如,一个前缀操作符的 oprleft
为 0。
pg_opfamily
目录 pg_opfamily
定义了操作符族。每一个操作符族是操作符和相关支持例程的集合,支持例程用于实现一个特定索引访问方法的语义。此外,按照访问方法指定的某种方式,一个族内的操作符都是“兼容的”。操作符族概念允许在索引中使用跨数据类型操作符,并可以使用访问方法语义的知识推导出。
列类型描述 |
---|
oid oid 行标识符 |
opfmethod oid (references pg_am .oid )操作符族适用的索引访问方法 |
opfname name 操作符系列的名字 |
opfnamespace oid (references pg_namespace .oid )操作符系列所属的名字空间 |
opfowner oid (references pg_authid .oid )操作符系列的拥有者 |
定义操作符族的主要信息不在它的 pg_opfamily
行,而是在相关的 pg_amop
、pg_amproc
和 pg_opclass
行中。
pg_partitioned_table
目录 pg_partitioned_table
存放有关表如何被分区的信息。
列类型描述 |
---|
partrelid oid (references pg_class .oid )这个分区表的 pg_class 项的 OID |
partstrat char 分区策略;h = 哈希分区表,l = 列表分区表,r = 范围分区表 |
partnatts int2 分区键中的列数 |
partdefid oid (references pg_class .oid )这个分区表的默认分区的 pg_class 项的 OID,如果这个分区表没有默认分区则为零。 |
partattrs int2vector (references pg_attribute .attnum )这是一个长度为 partnatts 值的数组,它指示哪些表列是分区键的组成部分。 例如,值 1 3 表示第一个和第三个表列组成了分区键。这个数组中的零表示对应的分区键列是一个表达式而不是简单的列引用。 |
partclass oidvector (references pg_opclass .oid )对于分区键中的每一个列,这个域包含要使用的操作符类的 OID。 详见 pg_opclass 。 |
partcollation oidvector (references pg_collation .oid )对于分区键中的每一个列,这个域包含要用于分区的排序规则的 OID,如果该列不是一种可排序数据类型则为零。 |
partexprs pg_node_tree 非简单列引用的分区键列的表达式树(以 nodeToString() 的表达方式)。 这是一个列表,partattrs 中每一个零项都有一个元素。如果所有分区键列都是简单列引用,则这个域为空。 |
pg_policy
目录 pg_policy
存储着表的行级安全性策略。 一个策略包括它适用于的命令种类(可能适用于所有命令)、它适用于的角色、 被作为安全屏障条件增加到包括该表的查询的表达式以及被作为 WITH CHECK
选项增加到尝试向表增加新纪录的查询的表达式。
列类型描述 |
---|
oid oid 行标识符 |
polname name 策略的名称 |
polrelid oid (references pg_class .oid )策略适用的表 |
polcmd char 策略适用的命令类型: r 表示 SELECT , a 表示 INSERT , w 表示 UPDATE , d 表示 DELETE , * 表示所有命令类型 |
polpermissive bool 策略是宽容性的还是限制性的 |
polroles oid[] (references pg_authid .oid )策略适用的角色 |
polqual pg_node_tree 被作为安全屏障条件增加到使用该表的查询的表达式树 |
polwithcheck pg_node_tree 被作为 WITH CHECK 条件增加到尝试向表增加行的查询的表达式树 |
注意
存储在 pg_policy
中的策略只有在它们所适用的表的 pg_class
.relrowsecurity
被设置时才其作用。
pg_proc
目录 pg_proc
存放有关函数、过程、聚集函数以及窗口函数(共称为例程)的信息。
如果 prokind
显示该条目用于一个聚集函数,在 pg_aggregate
中应该有一个相匹配的行。
列类型描述 |
---|
oid oid 行标识符 |
proname name 函数的名字 |
pronamespace oid (references pg_namespace .oid )函数所属的名字空间的 OID |
proowner oid (references pg_authid .oid )函数的拥有者 |
prolang oid (references pg_language .oid )实现语言或该函数的调用接口 |
procost float4 估计的执行代价(以 cpu_operator_cost 为单位),如果 proretset 为真,这是每行返回的代价 |
prorows float4 估计的结果行数量(如果 proretset 为假,该值为 0) |
provariadic oid (references pg_type .oid )可变数组参数的元素的数据类型,如果函数没有可变参数则为 0 |
prosupport regproc (references pg_proc .oid )对于该函数可选的计划器支持函数 |
prokind char``f 表示普通函数,p 表示过程,a 表示聚集函数,w 表示窗口函数 |
prosecdef bool 函数是一个安全性定义者(即,一个“setuid”函数) |
proleakproof bool 该函数没有副作用。除了通过返回值,没有关于参数的信息被传播。任何会抛出基于其参数值的错误信息的函数都不是泄露验证的。 |
proisstrict bool 当任意调用函数为空时,函数是否会返回空值。在那种情况下函数实际上根本不会被调用。非“strict”函数必须准备好处理空值输入。 |
proretset bool 函数是否返回一个集合(即,指定数据类型的多个值) |
provolatile char``provolatile 说明函数是仅仅只依赖于它的输入参数,还是会被外部因素影响。 值 i 表示“不变的”函数,它对于相同的输入总是输出相同的结果。 值 s 表示“稳定的”函数,它的结果(对于固定输入)在一次扫描内不会变化。 值 v 表示“不稳定的”函数,它的结果在任何时候都可能变化(使用 v 页表示函数具有副作用,所以对它们的调用无法得到优化) |
proparallel char``proparallel 说明该函数在并行模式下是否能安全地运行。 对于能在并行模式下不受限制安全运行的函数,这列是 s 。 对于可以在并行模式下运行但是只限于由并行分组的领导者执行的函数,这列是 r 。 对于在并行模式中不安全的函数,这列是 u ,这种函数的存在会强制一个顺序执行计划。 |
pronargs int2 输入参数的个数 |
pronargdefaults int2 具有默认值的参数个数 |
prorettype oid (references pg_type .oid )返回值的数据类型 |
proargtypes oidvector (references pg_type .oid )一个函数参数的数据类型的数组。这只包括输入参数(含 INOUT 和 VARIADIC 参数),因此也表现了函数的调用特征。 |
proallargtypes oid[] (references pg_type .oid )一个函数参数的数据类型的数组。这包括所有参数(含 OUT 和 INOUT 参数)。但是,如果所有参数都是 IN 参数,这个域将为空。 注意下标是从 1 开始 ,然而由于历史原因 proargtypes 的下标是从 0 开始。 |
proargmodes char[] 一个函数参数的模式的数组。编码为: i 表示 IN 参数 , o 表示 OUT 参数, b 表示 INOUT 参数, v 表示VARIADIC 参数, t 表示 TABLE 参数。 如果所有的参数都是 IN 参数,这个域为空。注意这里的下标对应着 proallargtypes 而不是 proargtypes 中的位置。 |
proargnames text[] 一个函数参数的名字的数组。没有名字的参数在数组中设置为空字符串。如果没有一个参数有名字,这个域为空。 注意这里的下标对应着 proallargtypes 而不是 proargtypes 中的位置。 |
proargdefaults pg_node_tree 默认值的表达式树(按照 nodeToString() 的表现方式)。 这是一个 pronargdefaults 元素的列表,对应于最后 N 个 input 参数(即最后 N 个 proargtypes 位置)。 如果没有一个参数具有默认值,这个域为空。 |
protrftypes oid[] 要在其上应用转换的数据类型的 OID。 |
prosrc text 这个域告诉函数处理者如何调用该函数。它可能是针对解释型语言的真实源码、一个符号链接、一个文件名或任何其他东西,这取决于实现语言/调用规范。 |
probin text 关于如何调用函数的附加信息。其解释是与语言相关的。 |
proconfig text[] 函数对于运行时配置变量的本地设置值 |
proacl aclitem[] 访问权限 |
对于编译好的函数,包括内建的和动态载入的,prosrc
包含了函数的 C 语言名字(链接符号)。对于所有其他已知的语言类型,prosrc
包含函数的源码文本。除了对于动态载入的 C 函数之外,probin
是不被使用的。对于动态载入的 C 函数,它给定了包含该函数的共享库文件的名称。
pg_publication
目录 pg_publication
包含数据库中创建的所有 publication。
列类型描述 |
---|
oid oid 行标识符 |
pubname name publication 的名称 |
pubowner oid (references pg_authid .oid )publication 的拥有者 |
puballtables bool 如果为真,这个 publication 自动包括数据库中的所有表,包括未来将会创建的任何表。 |
pubinsert bool 如果为真,为 publication 中的表复制 INSERT 操作。 |
pubupdate bool 如果为真,为 publication 中的表复制 UPDATE 操作。 |
pubdelete bool 如果为真,为 publication 中的表复制 DELETE 操作。 |
pubtruncate bool 如果为真,为 publication 中的表复制 TRUNCATE 操作。 |
pubviaroot bool 如果为真,则使用 publication 中提及的顶端分区祖先的标识和模式复制叶分区上的操作,而不是复制其自己的(标识和模式)。 |
pg_publication_rel
目录 pg_publication_rel
包含数据库中关系和 publication 之间的映射。这是一种多对多映射。
列类型描述 |
---|
oid oid 行标识符 |
prpubid oid (references pg_publication .oid )对 publication 的引用 |
prrelid oid (references pg_class .oid )对关系的引用 |
pg_range
目录 pg_range
存储关于范围类型的信息。它是类型在 pg_type
中项的补充。
列类型描述 |
---|
rngtypid oid (references pg_type .oid )范围类型的 OID |
rngsubtype oid (references pg_type .oid )该范围类型的元素类型(子类型)的 OID |
rngcollation oid (references pg_collation .oid )用于范围比较的排序规则的 OID,如果没有则为 0 |
rngsubopc oid (references pg_opclass .oid )用于范围比较的子类型的操作符类的 OID |
rngcanonical regproc (references pg_proc .oid )将一个范围值转换为规范形式的函数的 OID,如果没有则为 0 |
rngsubdiff regproc (references pg_proc .oid )以双精度 返回两个元素值不同的函数的 OID,如果没有则为 0 |
rngsubopc
(加上 rngcollation
,如果元素类型是可排序的)决定了被该范围类型所使用的排序顺序。rngcanonical
用于离散类型的元素类型。rngsubdiff
是可选的,但是提供它可以提高范围类型上的 GiST 索引性能。
pg_replication_origin
pg_replication_origin
目录包含所有已创建的复制源。
和大部分系统目录不同,pg_replication_origin
在一个集簇的所有数据库之间共享:每个集簇只有一份 pg_replication_origin
拷贝,而不是每个数据库一份。
列类型描述 |
---|
roident oid 一个集簇范围内唯一的复制源标识符。应该绝不会脱离系统。 |
roname text 外部的由用户定义的复制源名称。 |
pg_rewrite
目录 pg_rewrite
存储对于表和视图的重写规则。
列类型描述 |
---|
oid oid 行标识符 |
rulename name 规则名称 |
ev_class oid (references pg_class .oid )使用该规则的表 |
ev_type char 使用该规则的事件类型:1 = SELECT ,2 = UPDATE ,3 = INSERT ,4 = DELETE |
ev_enabled char 控制在哪种 session_replication_role 模式中触发该规则。 O = 规则在“origin”和“local”模式触发, D = 规则被禁用, R = 规则在“replica”模式触发, A = 规则总是被触发。 |
is_instead bool 为真表示是一个 INSTEAD 规则 |
ev_qual pg_node_tree 规则条件的表达式树(按照 nodeToString() 的表现形式) |
ev_action pg_node_tree 规则动作的查询树(按照 nodeToString() 的表现形式) |
如果一个表在这个目录中有任何规则,pg_class.relhasrules
必须为真。
pg_seclabel
目录 pg_seclabel
存储数据库对象上的安全标签。安全标签可以通过 SECURITY LABEL 命令操纵。
同时请见 pg_shseclabel
,它对集簇共享的数据库对象的安全标签执行相似的功能。
列类型描述 |
---|
objoid oid (参考任意 OID列)该安全标签依附的对象的 OID |
classoid oid (references pg_class .oid )该对象所出现的系统目录的 OID |
objsubid int4 对于一个在表列上的安全标签,这将是列号(objoid 和 classoid 指表本身)。对于所有其他对象类型,本列为0。 |
provider text 与该标签相关的标签提供者。 |
label text 应用于该对象的安全标签。 |
pg_sequence
目录 pg_sequence
包含有关序列的信息。一些序列的信息(例如名称和方案)放在 pg_class
中。
列类型描述 |
---|
seqrelid oid (references pg_class .oid )这个序列的 pg_class 项的 OID |
seqtypid oid (references pg_type .oid )序列的数据类型 |
seqstart int8 序列的起始值 |
seqincrement int8 序列的增量值 |
seqmax int8 序列的最大值 |
seqmin int8 序列的最小值 |
seqcache int8 序列的缓冲尺寸 |
seqcycle bool 序列是否循环 |
pg_shdepend
目录 pg_shdepend
记录数据库对象和共享对象之间的依赖关系,例如角色。这些信息使得 AntDB 可以确保对象在被删除时没有被其他对象引用。
另请参阅 pg_depend
,它对单个数据库中对象之间的依赖提供了相似的功能。
与大部分其他系统目录不同,pg_shdepend
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个 pg_shdepend
的拷贝,而不是每个数据库一份。
列类型描述 |
---|
dbid oid (references pg_database .oid )依赖者对象所在的数据库 OID,如果是一个共享对象则值为 0 |
classid oid (references pg_class .oid )依赖者对象所在的系统目录的 OID |
objid oid (参考任意 OID 列)依赖者对象的 OID |
objsubid int4 对于一个表列,这将是列号(objid 和 classid 指向表本身)。对于所有其他对象类型,该列值为 0。 |
refclassid oid (references pg_class .oid )被引用对象所在的系统目录的 OID(必须是一个共享的目录) |
refobjid oid (参考任意 OID 列)被引用对象的 OID |
deptype char 定义该依赖关系的特定语义的代码,参见文本 |
在所有情况下,一个 pg_shdepend
项表明被引用对象不能在没有删除其依赖对象的情况下被删除。但是,其中也有多种依赖类型,由 deptype
标识:
-
SHARED_DEPENDENCY_OWNER
(o
)被引用对象(必须是一个角色)是依赖对象的拥有者。
-
SHARED_DEPENDENCY_ACL
(a
)被引用对象(必须是一个角色)在依赖对象的 ACL(访问控制列表,即权限列表)中被提到。 (不会为对象的拥有者创建一个
SHARED_DEPENDENCY_ACL
项,因为拥有者将会有一个SHARED_DEPENDENCY_OWNER
项。) -
SHARED_DEPENDENCY_POLICY
(r
)作为一个依赖策略对象的目标被引用的对象(必须是一个角色)。
-
SHARED_DEPENDENCY_PIN
(p
)没有依赖对象,这种类型的项是一个信号,用来指示系统本身依赖于被引用对象,并且因此该对象必须永远不能被删除。这种类型的项只能被
initdb
创建。这种项中关于依赖对象的列值都为 0。
未来可能会需要其他的依赖类型。特别要注意的是在当前定义中只支持角色作为被引用对象。
pg_shdescription
目录 pg_shdescription
存储共享数据库对象的可选描述(注释)。描述可以通过 COMMENT 命令操作,并且可以使用 adb 的 \d
命令来查看。
另请参阅 pg_description
,它对单个数据库中对象之间的依赖提供了相似的功能。
与大部分其他系统目录不同,pg_shdescription
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个 pg_shdescription
的拷贝,而不是每个数据库一份。
列类型描述 |
---|
objoid oid (参考任意 OID 列)该描述所属的对象的 OID |
classoid oid (references pg_class .oid )该对象所在系统目录的 OID |
description text 作为该对象描述的任意文本 |
pg_shseclabel
目录 pg_shseclabel
存储共享数据库对象上的安全标签。安全标签可以通过 SECURITY LABEL 命令操纵。
另请参阅 pg_seclabel
,它对单个数据库中对象的安全标签提供了相似的功能。
与大部分其他系统目录不同,pg_shseclabel
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个 pg_shseclabel
的拷贝,而不是每个数据库一份。
列类型描述 |
---|
objoid oid (参考任意 OID 列)该安全标签所属对象的 OID |
classoid oid (references pg_class .oid )对象所属系统目录的 OID |
provider text 与此标签关联的标签提供者 |
label text 应用到该对象的安全标签。 |
pg_statistic
目录 pg_statistic
存储有关数据库内容的统计数据。其中的项由 ANALYZE 创建,查询规划器会使用这些数据来进行查询规划。注意所有的统计数据天然就是近似的,即使它刚刚被更新。
通常对于数据表中一个已经被 ANALYZE 过的列,在本目录中会存在一个 stainherit
= false
的项。如果该列所在的表具有后代(即有其他表继承该表),对于该列还会创建第二个 stainherit
= true
的项。stainherit
= true
的项表示列在整个继承树上的统计数据,即通过 SELECT *
column* FROM *
table**
看到的数据的统计,而 stainherit
= false
的项表示对 SELECT *
column* FROM ONLY *
table*
的结果的统计。
pg_statistic
也存储关于索引表达式值的统计数据,就好像它们是真正的数据列,但在这种情况中 starelid
指索引。对一个普通非表达式索引列不会创建项,因为它将是底层表列的项的冗余。当前,索引表达式的项都具有 stainherit
= false
。
因为不同类型的统计信息适用于不同类型的数据, pg_statistic
被设计成不太在意自己存储的是什么类型的统计。 只有极为常用的统计信息(比如 NULL 的含量)才在 pg_statistic
里给予专用的字段。 其它所有东西都存储在“槽位”中,而槽位是一组相关的列, 它们的内容用槽位中的一个列里的代码表示。 更详细的信息请参阅 src/include/catalog/pg_statistic.h
。
pg_statistic
不应该是公共可读的,因为即使是一个表内容的统计性信息也可能被认为是敏感的(例子:一个薪水列的最大和最小值可能是非常有趣的)。pg_stats
是 pg_statistic
上的一个公共可读的视图,它只会显示出当前用户可读的表的信息。
列类型描述 |
---|
starelid oid (references pg_class .oid )被描述列所属的表或索引 |
staattnum int2 (references pg_attribute .attnum )被描述列的编号 |
stainherit bool 如果为真,统计包含了继承后代的列而不仅仅是指定关系的列 |
stanullfrac float4 列的项为空的比例 |
stawidth int4 非空项的平均存储宽度,以字节计 |
stadistinct float4 列中非空唯一值的数目。一个大于零的值是唯一值的真正数目。 一个小于零的值是表中行数的乘数的负值;例如,对于一个 80% 的值为非空且每个非空值平均出现两次的列,可以表示为 stadistinct = -0.4。一个 0 值表示唯一值的数目未知。 |
stakind* N* int2 一个代码,它表示存储在该 pg_statistic 行中第 N 个“槽位”的统计类型。 |
staop* N* oid (references pg_operator .oid )一个用于生成这些存储在第 N 个“槽位”的统计信息的操作符。 比如,一个柱面图槽位会用< 操作符,该操作符定义了该数据的排序顺序。 |
stacoll* N* oid (references pg_collation .oid )排序规则用于导出存储在第 N 个“槽”中的统计信息。 例如,可排序列的直方图槽将显示定义数据排序顺序的排序规则。对于不可整理数据,为零。 |
stanumbers* N* float4[] 第 N 个“槽位”的类型的数值类型统计, 如果该槽位不涉及数值类型则为 NULL |
stavalues* N* anyarray 第 N 个“槽位”的类型的列值,如果该槽位类型不存储任何数据值则为 NULL。 每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型), 因此,除了把这些列的类型定义成 anyarray 之外别无他法。 |
pg_statistic_ext
目录 pg_statistic_ext
包含了扩展的规划器统计信息的定义。
列类型描述 |
---|
oid oid 行标识符 |
stxrelid oid (references pg_class .oid )包含这个对象所描述的列的表 |
stxname name 统计信息对象的名称 |
stxnamespace oid (references pg_namespace .oid )包含这个统计信息对象的名字空间的 OID |
stxowner oid (references pg_authid .oid )统计信息对象的拥有者 |
stxstattarget int4``stxstattarget 通过 ANALYZE 控制这个统计对象积累的统计信息的详细级别。 零值表示不应收集任何统计信息。负值表示使用引用列(如果设置)的统计信息目标的最大值或系统默认统计目标。 stxstattarget 的正值决定要收集的“most common values”的目标数。 |
stxkeys int2vector (references pg_attribute .attnum )一个属性编号的数组,表示哪些表列被这个统计信息对象覆盖。例如值 1 3 表示第一个和第三个表列被覆盖 |
stxkind char[] 包含被启用统计类型代码的数组,可用的值有: d 表示 n-distinct 统计信息, f 表示函数依赖统计信息和 m 表示最常见值(MCV)列表的统计信息 |
pg_statistic_ext
条目在 CREATE STATISTICS
期间完全填充,但是随后不计算实际的统计值。后来 ANALYZE
命令计算所需的值,并在 pg_statistic_ext_data
目录中填充条目。
pg_statistic_ext_data
目录 pg_statistic_ext_data
保存在 pg_statistic_ext
中定义的扩展规划器统计信息的数据。该目录的每一行对应用 CREATE STATISTICS 创建的一个统计信息对象。
就像 pg_statistic
,pg_statistic_ext_data
不应该被公众读取到,因为其内容可能被视为敏感内容。(例如:列中值的最常见组合可能非常令人关注。)pg_stats_ext
是 pg_statistic_ext_data
上的公共可读视图(与 pg_statistic_ext
连接后),它仅暴露有关当前用户可读的表和列的信息。
列类型描述 |
---|
stxoid oid (references pg_statistic_ext .oid )包含此数据定义的扩展统计信息对象 |
stxdndistinct pg_ndistinct N-distinct 计数,序列化为 pg_ndistinct 类型 |
stxddependencies pg_dependencies 函数依赖统计信息,序列化为 pg_dependencies 类型 |
stxdmcv pg_mcv_list MCV(最频值)列表统计信息,序列化为 pg_mcv_list 类型 |
pg_subscription
目录 pg_subscription
包含所有现有的逻辑复制订阅。
和大部分系统目录不同,pg_subscription
在集簇的所有数据库之间共享:每个集簇只有一份 pg_subscription
拷贝,而不是每个数据库一份。
对列 subconninfo
的访问被从普通用户那里收回,因为该列可能含有明文口令。
列类型描述 |
---|
oid oid 行标识符 |
subdbid oid (references pg_database .oid )订阅所在的数据库的 OID |
subname name 订阅的名称 |
subowner oid (references pg_authid .oid )订阅的拥有者 |
subenabled bool 如果为真,订阅被启用并且应该被复制。 |
subconninfo text 到上游数据库的连接字符串 |
subslotname name 上游数据库中复制槽的名称(也用于本地复制源名称);空表示 NONE |
subsynccommit text 包含订阅工作者的 synchronous_commit 设置的值。 |
subpublications text[] 被订阅的 publication 名称的数组。这些引用的是发布者服务器上的 publication。 更多有关 publication 的内容请见第 30.1 节。 |
pg_subscription_rel
目录 pg_subscription_rel
包含每个订阅中每个被复制关系的状态。这是一种多对多映射。
这个目录仅包含运行 CREATE SUBSCRIPTION
或 ALTER SUBSCRIPTION ... REFRESH PUBLICATION
以后对订阅已知的表。
列类型描述 |
---|
srsubid oid (references pg_subscription .oid )对订阅的引用 |
srrelid oid (references pg_class .oid )对关系的引用 |
srsubstate char 状态代码: i = 初始化, d = 数据正在被拷贝, s = 已同步, r = 准备好(普通复制) |
srsublsn pg_lsn 在 s 或 r 状态中,用于同步协调的状态更改的远程 LSN,否则为空 |
pg_tablespace
目录 pg_tablespace
存储关于可用表空间的信息。表可以被放置在特定表空间中以实现磁盘布局的管理。
与大部分其他系统目录不同,pg_tablespace
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个 pg_tablespace
的拷贝,而不是每个数据库一份。
列类型描述 |
---|
oid oid 行标识符 |
spcname name 表空间名 |
spcowner oid (references pg_authid .oid )表空间的拥有者,通常是创建它的用户 |
spcacl aclitem[] 访问权限 |
spcoptions text[] 表空间级别的选项,形如“keyword=value”的字符串 |
pg_transform
目录 pg_transform
存储有关转换的信息,转换是 一种让数据类型适应过程语言的机制。
列类型描述 |
---|
oid oid 行标识符 |
trftype oid (参考 pg_type .oid )这个转换所针对的数据类型的 OID |
trflang oid (references pg_language .oid )这个转换所针对的语言的 OID |
trffromsql regproc (references pg_proc .oid )一个函数的 OID,该函数用来将数据类型转换为过程语言的输入(例如函数参数)。如果不支持这种操作,这里存储零。 |
trftosql regproc (references pg_proc .oid )一个函数的 OID,该函数被用来转换过程语言的输出(例如返回值)为该数据类型。如果不支持这种操作,这里存储零。 |
pg_trigger
目录 pg_trigger
存储表和视图上的触发器。
列类型描述 |
---|
oid oid 行标识符 |
tgrelid oid (references pg_class .oid )触发器所在的表 |
tgparentid oid (参考 pg_trigger .oid )此被克隆的触发器的父触发器,如果不是克隆则为 0;这种情况会在创建分区或附加到分区表时发生。 |
tgname name 触发器名(在同一个表的触发器中必须唯一) |
tgfoid oid (references pg_proc .oid )要被触发器调用的函数 |
tgtype int2 标识触发器触发条件的位掩码 |
tgenabled char 控制触发器在 session_replication_role 模式中的触发。 O = 触发器在“origin”和“local”模式触发, D = 触发器被禁用, R = 触发器在“replica”模式触发, A = 触发器总是触发。 |
tgisinternal bool 为真表示触发器是内部生成的(通常是为了强制由 tgconstraint 指定的约束) |
tgconstrrelid oid (references pg_class .oid )被一个引用完整性约束引用的表 |
tgconstrindid oid (references pg_class .oid )支持一个唯一、主键、引用完整性约束或者排除约束的索引 |
tgconstraint oid (参考 pg_constraint .oid )可能存在的与触发器相关的 pg_constraint 项 |
tgdeferrable bool 如果约束触发器可推迟则为真 |
tginitdeferred bool 如果约束触发器初始可推迟则为真 |
tgnargs int2 传递给触发器函数的参数字符串个数 |
tgattr int2vector (references pg_attribute .attnum )如果触发器是列限定的,这里存放列号;否则这是一个空数组 |
tgargs bytea 传递给触发器的参数字符串,每一个都以 NULL 结尾 |
tgqual pg_node_tree 触发器 WHEN 条件的表达式树(以 nodeToString() 的表现形式),如果没有则为空 |
tgoldtable name``OLD TABLE 的 REFERENCING 子句名称,如果没有则为空 |
tgnewtable name``NEW TABLE 的 REFERENCING 子句名称,如果没有则为空 |
当前,列限定触发器只被 UPDATE
事件支持,因此 tgattr
只用于这种事件类型。tgtype
页可以包含用于其他事件类型的位,但其他事件类型是表范围的触发器且会忽略 tgattr
。
注意
当 tgconstraint
非零时,tgconstrrelid
、tgconstrindid
、tgdeferrable
和 tginitdeferred
与被引用的 pg_constraint
项有很大的冗余。但是,存在将一个不可延迟触发器关联到一个可延迟约束的可能性:外键约束可以有一些可延迟和一些不可延迟触发器。
注意
如果一个关系在本目录中拥有任何触发器,其 pg_class.relhastriggers
必须为真。
pg_ts_config
pg_ts_config
目录包含表示文本搜索配置的选项。一个配置指定了一个特定的文本搜索分析器和一个用于分析器输出记号的字典列表。分析器由 pg_ts_config
项展现,而记号到字典的映射则由 pg_ts_config_map
中的辅助项定义。
列类型描述 |
---|
oid oid 行标识符 |
cfgname name 文本搜索配置名 |
cfgnamespace oid (references pg_namespace .oid )包含该配置的名字空间的 OID |
cfgowner oid (references pg_authid .oid )配置的拥有者 |
cfgparser oid (references pg_ts_parser .oid )该配置的文本搜索分析器的 OID |
pg_ts_config_map
pg_ts_config_map
目录包含的项展示了对于每一个文本搜索配置的每一种输出记号类型,有哪些文本搜索字典可供查询以及以何种顺序。
列类型描述 |
---|
mapcfg oid (references pg_ts_config .oid )拥有该映射项的 pg_ts_config 项的 OID |
maptokentype int4 一种由配置的分析器送出的记号类型 |
mapseqno int4 查询该项的顺序(mapseqno 值小的优先) |
mapdict oid (参考 pg_ts_dict .oid )要查询的文本搜索字典的 OID |
pg_ts_dict
pg_ts_dict
目录包含定义文本搜索字典的项。一个字典依赖于一个文本搜索模板,它指定了所有需要的函数实现,字典本身则为模板支持的用户可设置参数提供值。这种分工允许无权限的用户创建字典。参数由一个文本串 dictinitoption
定义,其格式和意义随着模板而变化。
列类型描述 |
---|
oid oid 行标识符 |
dictname name 文本搜索字典名 |
dictnamespace oid (references pg_namespace .oid )包含该字典的名字空间 OID |
dictowner oid (references pg_authid .oid )字典的拥有者 |
dicttemplate oid (references pg_ts_template .oid )该字典的文本搜索模板的 OID |
dictinitoption text 模板的初始化选项字符串 |
pg_ts_parser
pg_ts_parser
目录包含定义文本搜索分析器的项。一个分析器负责将输入文本分割成词位并为每一个词位分配一个记号类型。由于一个分析器必须用 C 语言级别的函数实现,创建新分析器的工作只限于数据库的超级用户。
列类型描述 |
---|
oid oid 行标识符 |
prsname name 文本搜索分析器的名字 |
prsnamespace oid (references pg_namespace .oid )包含此分析器的名字空间的 OID |
prsstart regproc (references pg_proc .oid )分析器启动函数的 OID |
prstoken regproc (references pg_proc .oid )分析器的下一记号函数的 OID |
prsend regproc (references pg_proc .oid )分析器的关闭函数的 OID |
prsheadline regproc (references pg_proc .oid )分析器的大标题函数的 OID |
prslextype regproc (references pg_proc .oid )分析器的词汇类型函数的 OID |
pg_ts_template
pg_ts_template
目录包含定义文本搜索模板的项。一个模板是一类文本搜索字典的实现骨架。由于一个模板必须用 C 语言级别的函数实现,新模板的创建只限于数据库超级用户。
列类型描述 |
---|
oid oid 行标识符 |
tmplname name 文本搜索模板的名字 |
tmplnamespace oid (references pg_namespace .oid )包含此模板的名字空间的 OID |
tmplinit regproc (references pg_proc .oid )模板的初始化函数的 OID |
tmpllexize regproc (references pg_proc .oid )模板的词汇化函数的 OID |
pg_type
目录 pg_type
存储有关数据类型的信息。基类和枚举类型(标度类型)使用 CREATE TYPE 创建,而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的组合类型,用于表示表的行结构。也可以使用 CREATE TYPE AS
创建组合类型。
列类型描述 |
---|
oid oid 行标识符 |
typname name 数据类型的名字 |
typnamespace oid (references pg_namespace .oid )包含此类型的名字空间的 OID |
typowner oid (references pg_authid .oid )类型的拥有者 |
typlen int2 对于一个固定尺寸的类型,typlen 是该类型内部表示的字节数。 对于一个变长类型,typlen 为负值。 -1 表示一个“varlena”类型(具有长度字),-2 表示一个以空值结尾的 C 字符串。 |
typbyval bool``typbyval 判断内部例程传递这个类型的数值时是通过传值还是传引用。 如果 typlen 不是 1、2 或 4(或者在Datum 为 8 字节的机器上为 8),因此 typbyval 最好是假。 变长类型总是传引用。注意即使长度允许传值, typbyval 也可以为假。 |
typtype char``typtype 可以是: b 表示一个基类, c 表示一个组合类型(例如一个表的行类型), d 表示一个域, e 表示一个枚举类型, p 表示一个伪类型,或 r 表示一个范围类型。 另请参阅 typrelid 和 typbasetype 。 |
typcategory char``typcategory 是一种任意的数据类型分类,它被分析器用来决定哪种隐式转换“更好”。 |
typispreferred bool 如果此类型在它的 typcategory 中是一个更好的转换目标,此列为真 |
typisdefined bool 如果此类型已被定义则为真,如果此类型只是一个表示还未定义类型的占位符则为假。 当 typisdefined 为假,除了类型名字、名字空间和 OID 之外什么都不能被依赖。 |
typdelim char 在分析数组输入时,分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的, 而不是和数组的数据类型关联。 |
typrelid oid (references pg_class .oid )如果这是一个复合类型(见 typtype ), 那么这个列指向 pg_class 中定义对应表的项 (对于自由存在的复合类型,pg_class 项并不表示一个表,但不管怎样该类型的 pg_attribute 项需要链接到它)。对非复合类型此列为零。 |
typelem oid (参考 pg_type .oid )如果 typelem 不为 0,则它标识 pg_type 里面的另外一行。 当前类型可以被加上下标得到一个值为类型 typelem 的数组来描述。 一个“真的”数组类型是变长的(typlen = -1),但是一些定长的(typlen > 0)类型也拥有非零的 typelem ,比如 name 和 point 。 如果一个定长类型拥有一个 typelem , 则它的内部形式必须是某个 typelem 数据类型的值,不能有其它数据。变长数组类型有一个由该数组子例程定义的头。 |
typarray oid (参考 pg_type .oid )如果 typarray 不是 0,则它标识 pg_type 中的另一行,这一行是一个将此类型作为元素的“真的”数组类型 |
typinput regproc (references pg_proc .oid )输入转换函数(文本格式) |
typoutput regproc (references pg_proc .oid )输出转换函数(文本格式) |
typreceive regproc (references pg_proc .oid )输入转换函数(二进制格式),如果没有则为 0 |
typsend regproc (参考 pg_proc .oid )输出转换函数(二进制格式),如果没有则为 0 |
typmodin regproc (参考 pg_proc .oid )类型修改器输入函数,如果类型没有提供修改器则为 0 |
typmodout regproc (参考 pg_proc .oid )类型修改器输出函数,或为 0 以使用标准格式 |
typanalyze regproc (参考 pg_proc .oid )自定义 ANALYZE 函数,0 表示使用标准函数 |
typalign char``typalign 是当存储此类型值时要求的对齐性质。 它应用于磁盘存储以及该值在 AntDB 内部的大多数表现形式。 如果数值是连续存放的,比如在磁盘上的一个完整行,在这种类型的数据前会插入填充,这样它就可以按照指定边界存储。 对齐引用是该序列中第一个数据的开头。对齐引用是序列中第一个数据的开始。 可能的值为:c = char 对齐,即不需要对齐。s = short 对齐(在大部分机器上为 2 字节)。i = int 对齐(在大部分机器上为 4 字节)。d = double 对齐(在很多机器上为 8 字节,但绝不是全部)。 |
typstorage char 如果一个变长类型(typlen = -1)可被 TOAST,typstorage 说明这种类型的列应采取的默认策略。 可能的值是:p (普通的):值必须始终以普通方式存储(非 varlena 类型总是使用这个值)。e (外部的):值可以存储在一个次要 “TOAST” 关系中 (如果有一个关系, 参见 pg_class.reltoastrelid )。m (主要的): 值可以被压缩并内联存储。x (扩展的): 值可以被压缩和/或移动到次要关系。x toast-able 类型的常用选项。 注意m 值也可以被移动到二级存储,但只能是作为最后一种方案(e 和 x 值会先被移动)。 |
typnotnull bool``typnotnull 表示类型上的一个非空约束。只用于域。 |
typbasetype oid (references pg_type .oid )如果这是一个域(见 typtype ),则 typbasetype 标识这个域基于的类。如果此类不是一个域则为 0。 |
typtypmod int4 域使用 typtypmod 来记录被应用于它们基类型的 typmod (如果基类型不使用 typmod ,则为 -1)。如果此类型不是一个域则为 -1。 |
typndims int4 对于一个数组上的域,typndims 是数组维度数(即,typbasetype 是一个数组类型)。除数组类型上的域之外的类型的此列为 0。 |
typcollation oid (references pg_collation .oid )typcollation 指定此类型的排序规则。如果类型不支持排序规则,此列为 0。 一个支持排序规则的基类型此处会有一个非零值,典型值为 DEFAULT_COLLATION_OID 。 可排序类型上的域可以有一个不同于其基类型的排序规则 OID,如果为该域指定了一个排序规则 OID 的话。 |
typdefaultbin pg_node_tree 如果 typdefaultbin 为非空,那么它是 该类型默认表达式的 nodeToString() 表现形式。这个列只用于域。 |
typdefault text 如果某类型没有相关默认值,那么 typdefault 为空。如果 typdefaultbin 不为空, 那么 typdefault 必须包含一个 typdefaultbin 所指的默认表达式的人类可读的版本。 如果 typdefaultbin 为空但 typdefault 不为空,则 typdefault 是该类型默认值的外部表现形式, 它可以被交给该类型的输入转换器来产生一个常量。 |
typacl aclitem[] 访问权限 |
注意
对于系统表中使用的固定宽度类型,关键的是在 pg_type
定义的大小和对齐与编译器在表示表行的结构中布局列的方式一致。
pg_user_mapping
目录 pg_user_mapping
存储从本地用户到远程的映射。对这个目录的访问对普通用户有限制,可使用视图 pg_user_mappings
替代。
列类型描述 |
---|
oid oid 行标识符 |
umuser oid (参考 pg_authid .oid )将要被映射的本地角色的 OID,如果用户映射是公共的则为 0 |
umserver oid (references pg_foreign_server .oid )包含此映射的外部服务器的 OID |
umoptions text[] 用户映射特定的选项,以“keyword=value”字符串形式 |