【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 命令的数量,而不是处理的行数。此外,只有实际修改数据库内容的命令才会使用命令标识符。

相关推荐
蓝倾97621 分钟前
小红书获取关键词列表API接口详解
开发语言·数据库·python
王木风36 分钟前
InnoDB 多版本控制 &慢sql排查(基于MySQL 5.7)
数据库·sql·mysql
二向箔reverse38 分钟前
Selenium 启动的浏览器自动退出问题分析
java·开发语言·数据库
兔子坨坨1 小时前
一小时学习Redis
数据库·redis·学习
zone_z1 小时前
Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
数据库·oracle
胖头鱼的鱼缸(尹海文)1 小时前
数据库管理-第349期 Oracle DB 23.9新特性一览(20250717)
数据库·oracle
dingdingfish2 小时前
PostgreSQL 16 Administration Cookbook 读书笔记:第7章 Database Administration
postgresql·database·administration·cookbook
云盾安全防护3 小时前
WAF能够解决数据库被渗透的问题吗?
网络·数据库
运维栈记3 小时前
CPython的全局解释器锁-GIL即将成为历史
java·开发语言·数据库
未来并未来3 小时前
深入理解 Redis 集群化看门狗机制:原理、实践与风险
数据库·redis·缓存