PostgreSQL 10.1 手册_部分 II. SQL 语言_第 8 章 数据类型_8.18. 对象标识符类型

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 8.18. 对象标识符类型 对象标识符(OID)被PostgreSQL用来在内部作为多个系统表的主键。OID不会被添加到用户创建的表中,除非在创建表时指定了WITH OIDS或者default_with_oids配置变量被启用。

8.18. 对象标识符类型

对象标识符(OID)被PostgreSQL用来在内部作为多个系统表的主键。OID不会被添加到用户创建的表中,除非在创建表时指定了WITH OIDS或者default_with_oids配置变量被启用。类型oid表示一个对象标识符。也有多个oid的别名类型:regprocregprocedureregoperregoperatorregclassregtyperegroleregnamespaceregconfigregdictionary表 8.24显示了一个概览。

oid类型目前被实现为一个无符号4字节整数。因此,在大型数据库中它并不足以提供数据库范围内的唯一性,甚至在一些大型的表中也无法提供表范围内的唯一性。于是,我们不鼓励使用一个用户定义表的OID列作为主键。OID最好只被用于引用系统表。

oid类型本身除了比较之外只有很少的操作。不过,它可以被造型成整数,并且接着可以使用标准的整数操作符进行操纵(这样做时要注意有符号和无符号之间可能出现的混乱)。

OID的别名类型除了特定的输入和输出例程之外没有别的操作。这些例程可以接受并显示系统对象的符号名,而不是类型oid使用的原始数字值。别名类型使查找对象的OID值变得简单。例如,要检查与一个表mytable有关的pg_attribute行,你可以写:

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

而不是:

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

虽然从它本身看起来并没有那么糟,它仍然被过度简化了。如果有多个名为mytable的表存在于不同的模式中,就可能需要一个更复杂的子选择来选择右边的OID。regclass输入转换器会根据模式路径设置处理表查找,并且因此它会自动地完成这种右边的事情。类似地,对于一个数字OID的符号化显示可以很方便地通过将表OID造型成regclass来实现。

表 8.24. 对象标识符类型

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

所有用于由名字空间组织的对象的 OID 别名类型都接受模式限定的名字,如果没有被限定的对象在当前搜索路径中无法找到时,将会在输出时显示模式限定的名字。regprocregoper别名类型将只接受唯一的(非重载的)输入名字,因此它们的使用是受限的;对于大多数使用,regprocedureregoperator更合适。对于regoperator,通过使用NONE来替代未使用的操作数可以标识一元操作符。

大部分 OID 别名类型的一个附加性质是依赖性的创建。如果这些类型之一的一个常量出现在一个存储的表达式(如一个列默认值表达式或视图)中,它会在被引用的对象上创建一个依赖。例如,如果一个列有一个默认值表达式nextval('my_seq'::regclass)PostgreSQL会理解该默认值表达式是依赖于序列my_seq的,在删除该默认值表达式之前系统将不允许删除该序列。regrole是这个性质的唯一例外。这种类型的常量不允许出现在这类表达式中。

注意

OID 别名类型不完全遵循事务隔离规则。规划器也把它们当做简单常量, 这可能会导致次优的规划。

另一种系统中使用的标识符类型是xid,或者称为事务(简写为xact)标识符。这是系统列xminxmax使用的数据类型。事务标识符是32位量。

系统使用的第三种标识符类型是cid,或者称为命令标识符。这是系统列cmincmax使用的数据类型。命令标识符也是32位量。

系统使用的最后一种标识符类型是tid,或者称为元组标识符(行标识符)。这是系统列ctid使用的数据类型。一个元组ID是一个(块号,块内元组索引)对,它标识了行在它的表中的物理位置。

(这些系统列在第 5.4 节中有进一步的解释)。

本文转自PostgreSQL中文社区,原文链接:8.18. 对象标识符类型

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
SQL Java 分布式数据库
Flink CDC HBase字段类型与Flink SQL类型之间的转换
【1月更文挑战第4天】【1月更文挑战第19篇】Flink CDC HBase字段类型与Flink SQL类型之间的转换
65 1
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
111 1
|
14天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在使用 DataWorks 数据集成同步 PostgreSQL 数据库中的 Geometry 类型数据如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
24 0
|
14天前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2月前
|
关系型数据库 Serverless 分布式数据库
PolarDB的Serverless能力与同类型产品的对比
【2月更文挑战第21天】PolarDB的Serverless能力与同类型产品的对比
21 2
|
2月前
|
SQL 安全 API
|
3月前
|
SQL JSON 数据库
常见的sql注入类型闭合及符号
常见的sql注入类型闭合及符号
48 0
|
3月前
|
SQL 监控 Java
Flink报错问题之Flink sql tinyint类型使用in报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
3月前
|
SQL Serverless 数据库
SQL语句的类型
SQL语句的类型
|
4月前
|
SQL Perl
pl sql -00615错误,操作数和类型不一致问题
pl sql -00615错误,操作数和类型不一致问题
21 0
pl sql -00615错误,操作数和类型不一致问题