zoukankan      html  css  js  c++  java
  • PostgreSQL系统字段

    每个表都有几个系统字段,这些字段是由系统隐含定义的。因此,这些名字不能用于用户定义的字段名。请注意这些限制与这个名字是否关键字无关,把名字用引号括起来并不能让你逃离这些限制。你实际上不需要注意这些字段;只要知道它们存在就可以了。

    oid

    行对象标识符(对象ID)。这个字段只有在创建表的时候使用了WITH OIDS 或者是配置参数default_with_oids的值为真时出现。这个字段的类型是oid(和字段同名).

    tableoid

    包含本行的表的OID。这个字段对那些从继承层次中选取的查询特别有用,因为如果没有它的话,我们就很难说明一行来自哪个独立的表。tableoid 可以和pg_classoid字段连接起来获取表名字。

    xmin

    插入该行版本的事务标识(事务ID)。注意:在这个环境里,一个行版本是一行的一个状态;一行的每次更新都为同一个逻辑行创建一个新的行版本。

    cmin

    在插入事务内部的命令标识(从零开始)。

    xmax

    删除事务的标识(事务ID),如果不是被删除的行版本,那么是零。在一个可见行版本里,这个字段有可能是非零。这通常意味着删除事务还没有提交,或者是一个删除的企图被回滚掉了。

    cmax

    删除事务内部的命令标识符,或者是零。

    ctid

    一个行版本在它所处的表内的物理位置。请注意,尽管ctid 可以用于非常快速地定位行版本,但每次VACUUM FULL之后,一个行的ctid都会被更新或者移动。因此ctid 是不能作为长期的行标识符的。应该使用 OID ,或者更好是用户定义的序列号,来标识一个逻辑行。

    OID是32位的量,是在同一个集群内通用的计数器上赋值的。对于一个大型或者长时间使用的数据库,这个计数器是有可能重叠的。因此,假定OID唯一是非常错误的,除非你自己采取了措施来保证它们是唯一的。如果你需要标识表中的行,我们强烈建议使用序列号生成器。不过,也可以使用OID,只要采取几个注意事项即可:

    • 在使用OID标识行的每个表的OID字段创建一个唯一约束。在唯一约束(或者唯一索引)存在的时候,系统会注意不去生成一个和现有行相同的OID。当然,只有在表中的数据行少于232 (40亿)行的时候才是可能的,而实际上表中的行最好远比这个小,要不性能就会受影响了。

    • 绝对不要假设OIDs是跨表唯一的;如果你需要全数据库范围内的标识,请使用tableoid和行的OID的组合。

    • 需要OID的表应该带着WITH OIDS创建。从PostgreSQL 8.1开始,WITHOUT OIDS是缺省的。

    事务标识符也是32位的量。在长时间运转的数据库里,它也可能会重叠。只要我们采取一些合适的维护步骤,这并不是很要命的问题。不过,在长时间运行的环境里(超过十亿次事务)依赖事务ID的唯一性并非明智的做法。

    命令标识符也是32位的量。这样就在一个事务里有232(四十亿)条SQL命令的硬限制。在现实里这个限制应该不是什么问题,需要注意的是这个限制是SQL命令的条数,而不是处理的行版本的条数。而且,只有真正修改数据库内容的命令才会消耗一个命令标识符。

    更多关于PostgreSQL的知识,请查看http://www.infocool.net

  • 相关阅读:
    子类、变换cocos2dx 学习点滴(5) Scene,Director, Layer 和 Spriteby小雨
    宋体、代码iOS网络编程实践NSStream实现TCP Socket iPhone客户端by小雨
    软件、双核基于全志A10\A20产品跑分测试结果对比by小雨
    开机、问题MocorDroid拔掉电池开机比正常关机后开机慢1分钟问题by小雨
    服务、启动Android音频系统之AudioFlinger(一)by小雨
    设备、线程Android音频系统之AudioFlinger(二)by小雨
    数据、循环Android音频系统之AudioFlinger(三)by小雨
    声音、音频Android音频系统之AudioPolicyServiceby小雨
    判断、转载【Cocos2DX 】初窥门径(8)判断精灵点击by小雨
    文件、格式【Cocos2DX 】初窥门径(10)解决中文乱码by小雨
  • 原文地址:https://www.cnblogs.com/wolaiye320/p/5582198.html
Copyright © 2011-2022 走看看