半个PostgreSQL DBA,热衷于数据库相关的技术。我的ppt分享https://pan.baidu.com/s/1eRQsdAa https://github.com/chenhuajun https://chenhuajun.github.io
分类: Mysql/postgreSQL
2015-03-31 11:56:18
pg_type
pg_type存储有关数据类型的信息。基本类型和枚举类型(标量类型)是用 创建的,域是使用创建的。 同时还为数据库中每个表自动创建一个复合类型,以表示该表的行结构。还可以用 CREATE TYPE AS创建复合类型。
Table 47-51. pg_type 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性;必须明确选择) | |
typname | name | 数据类型名 | |
typnamespace | oid | .oid | 包含这个类型的名字空间的OID |
typowner | oid | .oid | 该类型的所有者 |
typlen | int2 | 对于定长类型是该类型内部表现形式的字节数目。对于变长类型是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字符串。 | |
typbyval | bool | 判断内部过程传递这个类型的数值时是通过传值还是传引用。 如果该类型不是 1, 2, 4, 8 字节长将只能按引用传递,因此 typbyval 最好是假。 即使可以传值,typbyval 也可以为假。 | |
typtype | char | 对于基础类型是b,对于复合类型是c (比如,一个表的行类型)。对于域类型是d,对于枚举类型是e, 对于伪类型是p,对于范围类型是r。 又见typrelid和typbasetype。 | |
typcategory | char | typcategory是数据类型的任意分类, 该数据类型被触发器用来决定哪种隐式转换应该是"首选"。 参阅。 | |
typispreferred | bool | 如果类型在它的typcategory 里是首选转换目标则为真。 | |
typisdefined | bool | 如果定义了类型则为真,如果是一种尚未定义的类型的占位符则为假。如果为假, 那么除了该类型名称,名字空间,和 OID 之外没有可靠的信息。 | |
typdelim | char | 当分析数组输入时,分隔两个此类型数值的字符。请注意该分隔符是与数组元素数据类型相关联的, 而不是和数组数据类型关联。 | |
typrelid | oid | .oid | 如果是复合类型(见typtype)那么这个字段指向pg_class 中定义该表的行。对于自由存在的复合类型,pg_class记录并不表示一个表, 但是总需要它来查找该类型连接的pg_attribute记录。对于非复合类型为零。 |
typelem | oid | .oid | 如果不为 0 ,那么它标识pg_type里面的另外一行。 当前类型可以像一个数组产生类型为typelem的值一样当做下标。 一个"真正的"数组类型是变长的(typlen = -1), 但是一些定长的(typlen > 0)类型也拥有非零的typelem (比如name和point)。如果一个定长类型拥有一个typelem, 那么他的内部形式必须是typelem数据类型的某个数目的个数值, 不能有其它数据。变长数组类型有一个该数组子过程定义的头(文件)。 |
typarray | oid | .oid | 如果typarray非零,那么它在pg_type 里定义另外一行,该行是将这个类型作为元素的"真正的"数组类型。 |
typinput | regproc | .oid | 输入转换函数(文本格式) |
typoutput | regproc | .oid | 输出转换函数(文本格式) |
typreceive | regproc | .oid | 输入转换函数(二进制格式),如果没有则为 0 |
typsend | regproc | .oid | 输出转换函数(二进制格式),如果没有则为 0 |
typmodin | regproc | .oid | 类型修饰符输入函数,如果类型不支持修饰符则为0 |
typmodout | regproc | .oid | 类型修饰符输出函数,如果使用标准格式则为0 |
typanalyze | regproc | .oid | 自定义的ANALYZE函数,如果使用标准函数,则为 0 |
typalign | char |
当存储此类型的数值时要求的对齐性质。它应用于磁盘存储以及该值在PostgreSQL 内部的大多数形式。如果数值是连续存放的,比如在磁盘上以完全的裸数据的形式存放时, 那么先在此类型的数据前填充空白,这样它就可以按照要求的界限存储。对齐引用是该序列中第一个数据的开头。 可能的值有:
|
|
typstorage | char |
告诉一个变长类型(那些有typlen = -1的) 说该类型是否准备好应付非常规值,以及对这种类型的属性的缺省策略是什么。可能的值有
请注意m域也可以移到从属表里存储,但只是最后的解决方法 (e和x域先移走)。 |
|
typnotnull | bool |
代表在某类型上的一个 NOTNULL 约束。目前只用于域。 |
|
typbasetype | oid | .oid |
如果这是一个域(参阅typtype), 那么标识作为这个类型的基础的类型。如果不是域则为零。 |
typtypmod | int4 |
域使用typtypmod记录要作用到它们的基础类型上的typmod (如果基础类型不使用typmod则为 -1)。如果这种类型不是域,那么为 -1 。 |
|
typndims | int4 |
如果是一个域数组,那么typndims是数组维数的数值(也就是说, typbasetype是一个数组类型)。非域非数组类型为零。 |
|
typcollation | oid | .oid |
指定类型的排序规则。如果类型不支持排序,则为0。一个支持排序的基础类型将有 DEFAULT_COLLATION_OID。一个可排序类型的域可以有一些其他排序OID, 如果为该域指定了一个的话。 |
typdefaultbin | pg_node_tree |
如果为非 NULL ,那么它是该类型缺省表达式的nodeToString()表现形式。 目前这个字段只用于域。 |
|
typdefault | text |
如果某类型没有相关缺省值,那么typdefault是 NULL 。如果typdefaultbin 不是 NULL ,那么typdefault必须包含一个typdefaultbin 代表的缺省表达式的人类可读的版本。如果typdefaultbin为 NULL 但typdefault 不是,那么typdefault是该类型缺省值的外部表现形式, 可以把它交给该类型的输入转换器生成一个常量。 |
|
typacl | aclitem[] | 访问权限;参阅和获取细节。 |
列出了系统定义的typcategory的值。 任何未来添加到这个列表的也是大写的ASCII字母。所有其他ASCII字符为用户定义的范畴保留。
Table 47-52. typcategory 代码
代码 | 种类 |
---|---|
A | 数组类型 |
B | 布尔类型 |
C | 复合类型 |
D | 日期/时间类型 |
E | 枚举类型 |
G | 几何类型 |
I | 网络地址类型 |
N | 数值类型 |
P | 伪类型 |
R | 范围类型 |
S | 字符串类型 |
T | 时间间隔类型 |
U | 用户定义类型 |
V | 位串类型 |
X | 未知 类型 |
点击(此处)折叠或打开
pg_operator存储有关操作符的信息。参阅 CREATE OPERATOR 和 节33.12 获取这些操作符参数的细节。
Table 47-33. pg_operator 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性;必须明确选择) | |
oprname | name | 操作符的名字 | |
oprnamespace | oid | .oid | 包含此操作符的名字空间的 OID |
oprowner | oid | .oid | 操作符所有者 |
oprkind | char | b = infix = 中缀("两边"), l = 前缀("左边"), r = 后缀("右边") | |
oprcanmerge | bool | 这个操作符支持合并连接 | |
oprcanhash | bool | 这个操作符支持 Hash 连接 | |
oprleft | oid | .oid | 左操作数的类型 |
oprright | oid | .oid | 右操作数的类型 |
oprresult | oid | .oid | 结果类型 |
oprcom | oid | .oid | 此操作符的交换符,如果存在的话 |
oprnegate | oid | .oid | 此操作符的反转器,如果存在的话 |
oprcode | regproc | .oid | 实现这个操作符的函数 |
oprrest | regproc | .oid | 此操作符的约束选择性计算函数 |
oprjoin | regproc | .oid | 此操作符的连接选择性计算函数 |
未用的字段包含零。比如,oprleft对于前缀操作符而言是零。
点击(此处)折叠或打开
点击(此处)折叠或打开
pg_am存储有关索引访问方法的信息。系统支持的每种索引访问方法都有一行。 这个表的内容在详细讨论。
Table 47-3. pg_am 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性; 必须明确选择) | |
amname | name | 访问方法的名字 | |
amstrategies | int2 | 这个访问方法的操作符策略个数,或者如果访问方法没有一个固定的操作符策略集则为0。 | |
amsupport | int2 | 这个访问方法的支持过程个数 | |
amcanorder | bool | 这种访问方式是否支持通过索引字段值的命令扫描排序? | |
amcanorderbyop | bool | 这种访问方式是否支持通过索引字段上操作符的结果的命令扫描排序? | |
amcanbackward | bool | 这种访问方式是否支持向后扫描? | |
amcanunique | bool | 这种访问方式是否支持唯一索引? | |
amcanmulticol | bool | 这种访问方式是否支持多字段索引? | |
amoptionalkey | bool | 这种访问方式是否支持第一个索引字段上没有任何约束的扫描? | |
amsearcharray | bool | 这种访问方式是否支持ScalarArrayOpExpr搜索? | |
amsearchnulls | bool | 这种访问方式是否支持IS NULL/NOT NULL搜索? | |
amstorage | bool | 允许索引存储的数据类型与列的数据类型不同? | |
amclusterable | bool | 允许在一个这种类型的索引上群集? | |
ampredlocks | bool | 允许这种类型的一个索引管理细粒度的谓词锁定? | |
amkeytype | oid | .oid | 存储在索引里的数据的类型,如果不是一个固定的类型则为0 |
aminsert | regproc | .oid | "插入这个行" 函数 |
ambeginscan | regproc | .oid | "准备索引扫描" 函数 |
amgettuple | regproc | .oid | "下一个有效行" 函数, 如果没有则为0 |
amgetbitmap | regproc | .oid | "抓取所有有效行" 函数, 如果没有则为0 |
amrescan | regproc | .oid | "(重新)开始索引扫描" 函数 |
amendscan | regproc | .oid | "索引扫描后清理" 函数 |
ammarkpos | regproc | .oid | "标记当前扫描位置" 函数 |
amrestrpos | regproc | .oid | "恢复已标记的扫描位置" 函数 |
ambuild | regproc | .oid | "建立新索引" 函数 |
ambuildempty | regproc | .oid | "建立空索引" 函数 |
ambulkdelete | regproc | .oid | 批量删除函数 |
amvacuumcleanup | regproc | .oid | VACUUM 后的清理函数 |
amcanreturn | regproc | .oid | 检查是否索引支持唯一索引扫描的函数,如果没有则为0 |
amcostestimate | regproc | .oid | 估计一个索引扫描开销的函数 |
amoptions | regproc | .oid | 为一个索引分析和确认reloptions的函数 |
点击(此处)折叠或打开
pg_opfamily表定义操作符族。每个操作符族是一个操作符和相关支持例程的集合, 其中的例程实现为一个特定的索引访问方式指定的语义。另外,族中的操作符都是"兼容的", 通过由访问方式指定的方法。操作符族的概念允许交叉数据类型操作符和索引一起使用, 并且合理的使用访问方式的语义的知识。
操作符族在里面描述。
Table 47-34. pg_opfamily 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性; 必须明确选择) | |
opfmethod | oid | .oid | 操作符族使用的索引方法 |
opfname | name | 这个操作符族的名字 | |
opfnamespace | oid | .oid | 这个操作符的名字空间 |
opfowner | oid | .oid | 操作符族的所有者 |
定义一个操作符族的大多数信息不在它的pg_opfamily行里面, 而是在相关的行, 和 里。
----------------------------------------------------------------点击(此处)折叠或打开
pg_opclass定义索引访问方法操作符类。 每个操作符类为一种特定数据类型和一种特定索引访问方法定义索引字段的语义。 一个操作符类本质上指定一个特定的操作符族适用于一个特定的可索引的字段数据类型。 索引的字段实际可用的族中的操作符集是接受字段的数据类型作为它们的左边的输入的那个。
操作符类在里有比较详细的描述。
Table 47-32. pg_opclass 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性;必须明确选择) | |
opcmethod | oid | .oid | 操作符类所服务的索引访问方法 |
opcname | name | 这个操作符类的名字 | |
opcnamespace | oid | .oid | 这个操作符类的名字空间 |
opcowner | oid | .oid | 操作符类属主 |
opcfamily | oid | .oid | 包含该操作符类的操作符族 |
opcintype | oid | .oid | 操作符类索引的数据类型 |
opcdefault | bool | 如果操作符类是opcintype的缺省,则为真 | |
opckeytype | oid | .oid | 索引数据的类型,如果和opcintype相同则为零 |
一个操作符类的opcmethod必须匹配包含它的操作符族的 opfmethod。 同样,对于任意给定的opcmethod和opcintype的组合, 不能有超过一个pg_opclass行有opcdefault为真。
----------------------------------------------------------------点击(此处)折叠或打开
pg_amop表存储有关和访问方法操作符族关联的信息。 如果一个操作符是一个操作符族中的成员,那么在这个表中会占据一行。 一个族成员是一个search操作符或一个ordering操作符。 一个操作符可以在多个族中出现,但是不能在一个族中的多个搜索位置或多个排序位置中出现。 (尽管不太可能,但这是允许的,一个操作符可以被搜索和排序目的使用。)
Table 47-4. pg_amop 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性;必须明确选择) | |
amopfamily | oid | .oid | 这个项的操作符族 |
amoplefttype | oid | .oid | 操作符的左输入类型 |
amoprighttype | oid | .oid | 操作符的右输入类型 |
amopstrategy | int2 | 操作符策略数 | |
amoppurpose | char | 操作符目的, s为搜索或o为排序 | |
amopopr | oid | .oid | 该操作符的OID |
amopmethod | oid | .oid | 索引访问方式操作符族 |
amopsortfamily | oid | .oid | 如果是一个排序操作符,则为这个项排序所依据的btree操作符族; 如果是一个搜索操作符,则为0 |
"搜索"操作符表明这个操作符族的一个索引可以被搜索,找到所有满足 WHERE indexed_column operator constant的行。 显然,这样的操作符必须返回布尔值,并且它的左输入类型必须匹配索引的字段数据类型。
"排序"操作符表明这个操作符族的一个索引可以被扫描,返回以 ORDER BY indexed_column operator constant 顺序表示的行。这样的操作符可以返回任意可排序的数据类型,它的左输入类型也必须匹配索引的字段数据类型。 ORDER BY的确切的语义是由amopsortfamily字段指定的, 该字段必须为操作符的返回类型引用一个btree操作符族。
Note: 目前,假设排序操作符的排序顺序是被族缺省引用的,也就是ASC NULLS LAST。 这可以通过添加附加的行来明确声明排序选项来释放。
一个项的amopmethod必须匹配它包含的操作符族的opfmethod (包括amopmethod是故意违反性能原因的表结构的规范化)。同样, amoplefttype和amoprighttype必须匹配引用的 pg_operator的oprleft和oprright。
----------------------------------------------------------------点击(此处)折叠或打开
pg_amproc存储有关与访问方法操作符族相关联的支持过程的信息。 每个属于某个操作符族的支持过程都占有一行。
Table 47-5. pg_amproc 字段
名字 | 类型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行标识符(隐藏属性; 必须明确选择) | |
amprocfamily | oid | .oid | 该项的操作符族 |
amproclefttype | oid | .oid | 相关操作符的左输入数据类型 |
amprocrighttype | oid | .oid | 相关操作符的右输入数据类型 |
amprocnum | int2 | 支持过程编号 | |
amproc | regproc | .oid | 过程的 OID |
amproclefttype和amprocrighttype字段的习惯解释, 他们标识一个特定支持过程支持的操作符的左和右输入类型。对于某些访问方式, 他们匹配支持过程本身的输入数据类型,对其他的则不这样。有一个对索引的"缺省" 支持过程的概念,amproclefttype和amprocrighttype 都等于索引操作符类的opcintype。
----------------------------------------------------------------点击(此处)折叠或打开