zoukankan      html  css  js  c++  java
  • Greenplum表里的8个隐含字段

    一、8个隐含字段

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

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

           如下建表SQL在greenplum中不能通过:

    create table "public"."t_spec_name"(
    	"id" int PRIMARY KEY,
    	"oid" int
    )WITH OIDS;

            而下面的可通过:

    create table "public"."t_spec_name"(
    	"id" int PRIMARY KEY,
    	"oid" int
    );
    • tableoid: 包含本行的表的OID。这个字段对那些从继承层次中选取的查询特别有用,因为如果没有它的话,我们就很难说明一行来自哪个独立的表。tableoid可以和pg_class的oid字段连接起来获取表名字。

    • xmin: 插入该行版本的事务的标识(事务ID)。

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

    • xmax: 删除事务的标识(事务ID),如果不是被删除的行版本,那么是零。

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

    • ctid: 一个行版本在它所处的表内的物理位置

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

    • gp_segment_id: 指定行对象存储所在的segment的id编号

    二、示例:

          首先,创建一个含有2个字段的表:

    create table "t_aaa"(
    	"id" int PRIMARY KEY,
    	"ival" int 
    )WITH OIDS;
    

      然后,查询该表所含有的字段名:

    SELECT c.relname,a.attname from pg_class c, pg_attribute a where c.oid=a.attrelid and c.relname='t_aaa';
    

      

          继续,插入一条数据后,查看该行数据所在的segement节点:

    INSERT INTO "public"."t_aaa" ("id", "ival") VALUES ('1', '2')
    SELECT *,gp_segment_id from t_aaa;
    
  • 相关阅读:
    android如何在代码中设置margin
    也许游戏 它P/N图分析
    【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译
    HDU 3060 多边形面积并
    onmouseover和onmouseout的烦恼
    LoaderManager使用具体解释(三)---实现Loaders
    [每天一个Linux小技巧] gdb 下一次运行多个命令
    VB.NET版机房收费系统—DataGridView应用
    数据结构导论第一遍
    轻松搞定面试中的二叉树题目
  • 原文地址:https://www.cnblogs.com/inrgihc/p/14122797.html
Copyright © 2011-2022 走看看