【PostgreSQL】从零开始:(四十二)系统列

PostgreSQL 中的系统列

PostgreSQL 中的系统列是一组特殊的列,用于存储关于表和视图的元数据信息。这些列是由 PostgreSQL 数据库自动创建和维护的,并且不能直接修改或删除。

每个表都有多个系统列,这些列由系统隐式定义。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否为关键字是分开的;引用名称将不允许您逃避这些限制。您实际上不需要担心这些列;只要知道它们的存在。

  • oid:每个表和视图都有一个唯一的对象标识符(OID),可以用于在系统表中引用它们。

  • tableoid:每个行都有一个指向所属表的 OID 的字段。它可以用于识别行属于哪个表,即使在多态关系中也是如此。

  • xmin 和 xmax:这些列用于记录行的事务信息。xmin 表示创建行的事务 ID,xmax 表示删除或更新行的事务 ID。

  • ctid:每个行都有一个唯一的行标识符(CTID),用于在物理存储中引用它们。

  • cmin 和 cmax:这些列用于记录行的修改信息。cmin 表示插入行的事务 ID,cmax 表示删除或更新行的事务 ID。

  • xmin、xmax、cmin 和 cmax 这四个列通常与 MVCC(多版本并发控制)相关联,用于跟踪行的状态和版本信息。

这些系统列可以在查询中使用,但在大多数情况下,它们对于普通用户来说并不重要。它们主要用于数据库的内部管理和优化。

交易标识符也是 32 位数量。在长期存在的数据库中,事务 ID 可以换行。考虑到适当的维护程序,这不是一个致命的问题。然而,从长远来看,依赖交易 ID 的唯一性(超过 10 亿笔交易)是不明智的。

命令标识符也是 32 位数量。这将创建硬限制 232(40亿)单个事务中的 SQL 命令。在实践中,此限制不是问题 - 请注意,限制是针对 SQL 命令的数量,而不是处理的行数。此外,只有实际修改数据库内容的命令才会使用命令标识符。

相关推荐
RestCloud9 小时前
4中常见的数据集成方式
数据库
Databend10 小时前
超 10 倍查询加速,N-Gram Index 设计与优化全解析
数据库
爱可生开源社区11 小时前
SCALE:一个面向专业级任务的大语言模型 SQL 能力开源评测框架
数据库
星环科技TDH社区版11 小时前
星环科技产品可存储的表格式功能介绍以及创建示例
大数据·数据库
Tapdata15 小时前
全球 DaaS 市场研究报告上线,聚焦数据服务化趋势与行业演进路径
数据库
李少兄16 小时前
MySQL 默认连接数
数据库·mysql
刘一说16 小时前
资深Java工程师的面试题目(六)数据存储
java·开发语言·数据库·面试·性能优化
江沉晚呤时16 小时前
EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
java·开发语言·数据库
珹洺17 小时前
数据库系统概论(十九)详细讲解关系查询处理与查询优化
数据库
liulun17 小时前
SQLite官方数据库加密方案
数据库·sqlite