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

相关推荐
了一li1 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
码农君莫笑2 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
别致的影分身2 小时前
使用C语言连接MySQL
数据库·mysql
京东零售技术4 小时前
“慢”增长时代的企业数据体系建设:超越数据中台
数据库
sdaxue.com4 小时前
帝国CMS:如何去掉帝国CMS登录界面的认证码登录
数据库·github·网站·帝国cms·认证码
o(╥﹏╥)5 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
阿里嘎多学长5 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_5 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Sunyanhui15 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
老王笔记5 小时前
MHA binlog server
数据库·mysql