对象标识符 (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 sequencefoo
nextval('FOO') same as above nextval('"Foo"') operates on sequenceFoo
nextval('myschema.foo') operates onmyschema.foo
nextval('"myschema".foo') same as above nextval('foo') searches search path forfoo
当您将此类函数的参数编写为未修饰的文字字符串时,
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 节 中有进一步解释。)
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步澄清的内容,