2024年9月26日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

8.19. 对象标识符类型 #

对象标识符 (OID) 在 PostgreSQL 内部用作各种系统表的

oid 类型目前实现为一个无符号的四字节整数。因此,

oid 类型本身除了比较之外几乎没有其他操作。

OID 别名类型除了专门的输入和输出例程之外没有自己的操作。

SELECT * FROM pg_attribute WHERE attrelid = 'mytable'::regclass;

而不是

SELECT * FROM pg_attribute
  WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'mytable');

虽然这本身看起来还不错,但它仍然过于简化。

表 8.26. 对象标识符类型

名称 引用 描述 值示例
oid 任意 数字对象标识符 564182
regclass pg_class 关系名称 pg_type
regcollation pg_collation 排序规则名称 "POSIX"
regconfig pg_ts_config 文本搜索配置 english
regdictionary pg_ts_dict 文本搜索词典 simple
regnamespace pg_namespace 命名空间名称 pg_catalog
regoper pg_operator 运算符名称 +
regoperator pg_operator 带参数类型的运算符 *(integer,​integer)-(NONE,​integer)
regproc pg_proc 函数名称 sum
regprocedure pg_proc 带参数类型的函数 sum(int4)
regrole pg_authid 角色名称 smithee
regtype pg_type 数据类型名称 integer

所有按命名空间分组的对象的 OID 别名类型都接受限定模式的名称,

这些类型的输入函数允许在标记之间使用空格,

许多内置的 PostgreSQL 函数接受表的 OID 或其他类型的数据库对象的 OID,

nextval('foo')              operates on sequence foo
nextval('FOO')              same as above
nextval('"Foo"')            operates on sequence Foo
nextval('myschema.foo')     operates on myschema.foo
nextval('"myschema".foo')   same as above
nextval('foo')              searches search path for foo

注意

当您将此类函数的参数编写为未修饰的文字字符串时,

nextval('foo'::text)      foo is looked up at runtime

to_regclass() 函数及其同类函数也可用于执行运行时查找。

另一个 regclass 使用的实用示例是查找列在 information_schema

SELECT table_schema, table_name,
       pg_relation_size((quote_ident(table_schema) || '.' ||
                         quote_ident(table_name))::regclass)
FROM information_schema.tables
WHERE ...

quote_ident() 函数将负责在需要时对标识符进行双引号。

SELECT pg_relation_size(table_name)
FROM information_schema.tables
WHERE ...

不推荐的

大多数 OID 别名类型的另一个属性是依赖项的创建。

系统使用的另一种标识符类型是 xid 或事务(缩写为 xact)标识符。

系统使用的第三种标识符类型是 cid 或命令标识符。

系统使用的最终标识符类型是 tid 或元组标识符(行标识符)。

(系统列在 第 5.6 节 中有进一步解释。)

提交更正

如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步澄清的内容,