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

相关推荐
不穿格子的程序员14 分钟前
Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史
数据库·redis·集群·主从·高可用·哨兵
阿坤带你走近大数据28 分钟前
什么是元数据管理?(附具体实施方案供参考)
数据库·金融
xiliuhu30 分钟前
PgSQL高级用法
postgresql
俊男无期31 分钟前
超效率工作法
java·前端·数据库
2301_8234380231 分钟前
【无标题】解析《采用非对称自玩实现强健多机器人群集的深度强化学习方法》
数据库·人工智能·算法
中国胖子风清扬35 分钟前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
Elastic 中国社区官方博客1 小时前
Elasticsearch:你是说,用于混合搜索(hybrid search)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
czlczl200209251 小时前
高并发下的 Token 存储策略: Redis 与 MySQL 的一致性
数据库·redis·mysql
虹科网络安全1 小时前
艾体宝产品 | 基准测试:ArangoDB性能碾压Neo4j,速度最高提升8倍!
数据库·neo4j
哈哈老师啊1 小时前
Springboot校园订餐管理系统k2pr7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端