PostgreSQL数据库OID的介绍

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:381

数据库OID

为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号。在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识 (Object identifier-OID).
对象标识符类型
PostgreSQL 在内部使用对象标识符 (OID)作为各种系统表的主键.同时,系统还给用户创建的表增加一个 OID 系统字段(除非在建表时声明了 WITHOUT OIDS).类型 oid 代表一个对象标识符.除此以外还有几个 oid 的别名∶ regproc,regprocedure,regoper, regoperator,regclass,和 regtype. Table 8-19 显示了概要。
目前 oid 类型是用一个无符号的四字节整数实现的. 因此,它是不够用于提供大数据库范围内的唯一性保证的, 甚至在单个的大表中也不行.因此,我们不鼓励在用户创建的表中 使用 OID 字段做主键.OID 最好只是用于引用系统表.
oid 类型本身除了比较之外还有几个操作. 不过,它可以转换为整数,然后用标准的整数操作符操作.(如果你这么干, 那么请注意可能的有符号和无符号之间的混淆.)
OID 别名类型没有自己的操作,除指明的输入和输出过程之外. 这些过程可以为系统对象接受和显示符号名,而不仅仅是类型 oid 将要使用的行数值.别名类型允许我们简化为对象查找 OID 值的过程∶ 比如,我们可以写 'mytable'::regclass 以获取表 mytable 的 OID,而不是 SELECT oid FROM pg_class WHERE relname = 'mytable'. (实际上,如果在不同的模式里有多个叫 mytable 的表, 我们就需要一个更复杂的SELECT来处理从不同模式中选出正确的 OID 的工作.)
Table 8-19. 对象标识类型
名字 引用 描述 数值例子
oid 任意 数字的对象标识符 564182
regproc pg_proc 函数名字 sum
regprocedure pg_proc 带参数类型的函数 sum(int4)
regoper pg_operator 操作符名 +
regoperator pg_operator 带参数类型的操作符 *(integer,integer)或者-(NONE,integer)
regclass pg_class 关系名 pg_type
regtype pg_type 数据类型名 integer
所有 OID 别名类型都接受有模式修饰的名字,并且如果在当前 搜索路径中,在不增加修饰的情况下无法找到该对象,那么在输出 时将显示有模式修饰的名字.regproc 和 regoper 别名类型将只接受唯一的输入名字(不能重载),因此它们的用途有限; 对于大多数应用,regprocedure 或 regoperat或者 更合适.对于 regoperat或者,单目操作符是通过在那些未用的操作数 上写NONE来标识的.
系统使用的另外一个标识符类型是 xid,或者说是事务(缩写xact) 标识符.它是系统字段 xmin 和 xmax 的 数据类型.事务标识符是 32 位的量.
系统需要的第三种标识符类型是 cid,或者命令标识符. 它是系统字段 cmin 和 cmax 的数据类型. 命令标识符也是 32 位的量.
系统使用的最后的标识符类型是 tid,或者说是元组标识符. 它是系统表字段 ctid 的数据类型.元组 ID 是一对儿数值 (块号,块内的元组索引),它标识该元组在其所在表内的物理位置.

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】