美文网首页
PostgreSQL -- 表中的隐含字段

PostgreSQL -- 表中的隐含字段

作者: 古飞_数据 | 来源:发表于2023-04-12 06:46 被阅读0次

    数据表的字段信息都保存在pg_attributed 表中,数据表则保存在pg_class中

    postgres=# select c.relname,a.attname from pg_class c,pg_attribute a where c.oid=a.attrelid and c.relname='users';
     relname | attname  
    ---------+----------
     users   | cmax
     users   | cmin
     users   | ctid
     users   | id
     users   | name
     users   | tableoid
     users   | xmax
     users   | xmin
    (8 rows)
    

    oid: 行的对象标识符(对象ID)。

    注意:这个字段只有在创建表的时候使用了WITH OIDS,或者是设置了配置参数default_with_oids时出现,
    这个字段的类型是oid(和字段同名)。 
    OID是32位的量,是在同一个集群内通用的计数器上赋值的。对于一个大型或者长时间使用的数据库,
    这个计数器是有可能重叠的。因此,OID是唯一的是非常错误的想法.
    

    tableoid: 包含本行的表的OID。这个字段对那些从继承层次中选取的查询特别有用,因为如果没有它的话,我们就很难说明一行来自哪个独立的表。tableoid可以和pg_class的oid字段连接起来获取表名字。
    xmin: 插入该行版本的事务的标识(事务ID)。
    cmin: 在插入事务内部的命令标识(从零开始)。
    xmax: 删除事务的标识(事务ID),如果不是被删除的行版本,那么是零。
    cmax: 在删除事务内部的命令标识符,或者是零。
    ctid: 一个行版本在它所处的表内的物理位置

    注意,尽管ctid可以用于非常快速地定位行版本,但每次VACUUM FULL之后,一个行的ctid都会被更新或者移动。
    因此ctid是不能作为长期的行标识符的。   
    
    https://blog.51cto.com/u_13126942/2050015
    
    

    相关文章

      网友评论

          本文标题:PostgreSQL -- 表中的隐含字段

          本文链接:https://www.haomeiwen.com/subject/domnddtx.html