注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL-XC:修改表的 Distribute 分布方式  

2015-09-28 14:30:58|  分类: Postgres-XC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
     PostgreSQL-XC 里的表可以分为复制表和分片表,之前博客有介绍过, PostgreSQL-XC : Data Replication or Distribution ?   ,那么表的位置属性是否可以更改呢? 例如复制表是否可以修改成分片表? 在测试之前先来回顾下复制表和分片表。
 
 
一 关于复制表和分片表
--创建复制表和分片表

复制表
francs=> create table test_rep(id1 int4, id2 int4, name text) distribute by replication;
CREATE TABLE

HASH 分片表
francs=> create table test_hash(id1 int4, id2 int4, name text) distribute by hash(id2);
CREATE TABLE

modulo 分片表
francs=> create table test_modulo(id1 int4, id2 int4, name text) distribute by modulo(id1);
CREATE TABLE

备注:如何查看表是复制表和分片表呢?有两种方式。

--方式一: \d+ 元子命令

francs=> \d+ test_rep
                       Table "francs.test_rep"
 Column |  Type   | Modifiers | Storage  | Stats target | Description 
--------+---------+-----------+----------+--------------+-------------
 id1    | integer |           | plain    |              | 
 id2    | integer |           | plain    |              | 
 name   | text    |           | extended |              | 
Has OIDs: no
Distribute By: REPLICATION
Location Nodes: ALL DATANODES

备注:查看 Distribute By 属性,可以看到 test_rep 为复制表。

--方式二:查看 pgxc_class 系统表

PostgreSQL-XC:修改表的 Distribute 分布方式 - francs - PostgreSQL DBA
 备注:pgxc_class 系统表存储的是 pgxc 表的位置信息,为 PostgreSQL-XC 新增,主要字段含义如下:
       pcrelid: pgxc:  表的 OID
       pclocatortype:  表的属性,R 表示复制表,H 表示 hash 分片,M 表示 modulo 分片
       pcattnum:       表的分片字段位置
       pchashalgorithm:是否使用 hash 分片算法
       nodeoids:       数据结点列表


二 修改表的分片方式
--创建一张复制表 test_rep2 并插入测试数据

francs=> create table test_rep2(id1 int4, id2 int4, name text) distribute by replication;
CREATE TABLE

francs=> insert into test_rep2(id1,name) select n, n|| 'a' from generate_series(1,100) n;
INSERT 0 100

francs=> select pcrelid::regclass, * from pgxc_class where pcrelid::regclass ='test_rep2'::regclass;
-[ RECORD 1 ]---+------------
pcrelid | test_rep2
pcrelid | 26561
pclocatortype | R
pcattnum | 0
pchashalgorithm | 0
pchashbuckets | 0
nodeoids | 16388 16389


--修改复制表 test_rep2 Distribute 属性

francs=> alter table test_rep2 distribute by hash(id1);
ALTER TABLE

francs=> select pcrelid::regclass, * from pgxc_class where pcrelid::regclass ='test_rep2'::regclass;
-[ RECORD 1 ]---+------------
pcrelid | test_rep2
pcrelid | 26561
pclocatortype | H
pcattnum | 1
pchashalgorithm | 1
pchashbuckets | 4096
nodeoids | 16388 16389

备注:可见 test_rep2 表成功地修改成了 hash 分片表,有一点需要注意,修改表的分片方式意味影着表的数据重新分布,如果是大表将非常耗时,且影响表上的 DML 操作。


三 参考  


  评论这张
 
阅读(552)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016