游戏,工作,投资,悟禅

工作就是修行

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在greenplum 数据库中,一般正常的表的数据都是存在segment 实例中的,master上并没有数据;但是也有一些特殊的系统表,例如gp_id, 在master上也有数据,每个segment 上也有自己的数据;

如果执行select * from gp_id; 查询出来的只是master 上的数据。

例如:

testdb1=# select gp_segment_id,* from gp_id;
 gp_segment_id |  gpname   | numsegments | dbid | content 
---------------+-----------+-------------+------+---------
            -1 | Greenplum |          -1 |   -1 |      -1
(1 row)

如果要查询segment 上的数据,就需要使用函数 gp_dist_random,例如:

testdb1=# select gp_segment_id,* from gp_dist_random('gp_id');
 gp_segment_id |  gpname   | numsegments | dbid | content 
---------------+-----------+-------------+------+---------
             0 | Greenplum |          -1 |   -1 |      -1
             1 | Greenplum |          -1 |   -1 |      -1
(2 rows)

如果我们要创建自己的表,并且把数据存储在master上,该如何实现呢? 很简单:
1. 按正常create table 语法创建表;

2.修改元数据表 gp_distribution_policy ,把该表的分布键记录删除;

set allow_system_table_mods=dml;

 delete from gp_distribution_policy where localoid='tablename'::regclass;

 

这样创建出来的表,就是master only表了;

 

posted on 2017-12-12 22:29  爱玩游戏的码农  阅读(433)  评论(0编辑  收藏  举报