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

相关推荐

  1. PostgreSQL开始:(系统

    2024-01-02 08:06:01       50 阅读
  2. PostgreSQL开始:(一)约束-排他约束

    2024-01-02 08:06:01       43 阅读
  3. 开始的C++(

    2024-01-02 08:06:01       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 08:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 08:06:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 08:06:01       82 阅读
  4. Python语言-面向对象

    2024-01-02 08:06:01       91 阅读

热门阅读

  1. 怎么获取客户端真实IP?GO

    2024-01-02 08:06:01       61 阅读
  2. django静态文件命名空间

    2024-01-02 08:06:01       58 阅读
  3. Django通用视图

    2024-01-02 08:06:01       51 阅读
  4. iostat获取IO延迟单位从ms调整us的方案

    2024-01-02 08:06:01       57 阅读
  5. 微信小程序如何分包管理

    2024-01-02 08:06:01       55 阅读
  6. 11.2 Screen调试实战(二,运行时阶段)

    2024-01-02 08:06:01       58 阅读
  7. K8S学习指南(55)-K8S核心组件Controller-Manager简介

    2024-01-02 08:06:01       53 阅读
  8. 【python爬虫】xpath使用说明

    2024-01-02 08:06:01       60 阅读
  9. 数据结构OJ实验13-动态查找

    2024-01-02 08:06:01       40 阅读
  10. PDF模板填充,基于IText5(改进版)

    2024-01-02 08:06:01       55 阅读