pgsql 分区表:

--主表
create table test(id integer, name varchar(32));
create index idx_test_id on test using btree(id); --分表
create table test_b (like test including constraints including defaults including indexes) inherits(test);
create table test_c (like test including constraints including defaults including indexes) inherits(test); alter table test_b add constraint con_test_c check(id >=1001 and id <= 2000);
alter table test_c add constraint con_test_b check(id >=2001 and id <= 3000); create table test_d( check(id >=3001 and id <= 4000))inherits (test); --插数据
insert into test_b select generate_series(1001,2000),'bbb';
insert into test_c select generate_series(2001,3000),'ccc';
insert into test_d select generate_series(3001,4000),'ddd'; --分析表,加入计划
analyze test_a; analyze test_b; analyze test_c;
analyze test_d; --测试查询计划 constraint_exclusion
set constraint_exclusion = off/partition;
show constraint_exclusion; explain select * from test where id = 1; --测试Insert
insert into test values (11,'aaaaa'); select * from test where name = 'aaaaa' select * from test_a; insert into test values(1,'a'),(1111,'v'),(2222,'vv'); select * from test_c; --创建触发器函数
create function tb_partition_insert()
returns trigger as
$$
begin
if (id >=1 and id <= 1000) then
insert into test_a values(NEW.*);
elseif (id >=1001 and id <= 2000) then
insert into test_b values(NEW.*);
elseif (id >=2001 and id <= 3000) then
insert into test_c values (new.*);
else
raise exception 'Date out of range. Fix the tbl_partition_insert_trigger() function!';
end if ;
return null;
end
$$
language plpgsql; --触发器
create trigger insert_test_parition
before insert on test
for each row execute procedure tb_partition_insert(); --测试Insert
insert into test values(1,'a'),(1111,'v'),(2222,'vv'); select pg_size_pretty(pg_relation_size('test')); insert into test select generate_series(1,1000),'aa';
select count(1) from test_a; select pg_size_pretty(pg_relation_size('test')); select pg_table_size('test')

参考:

  1. 为主:http://www.cnblogs.com/mchina/archive/2013/04/09/2973427.html
  2. 为辅:http://my.oschina.net/Kenyon/blog/59455 ,http://www.postgres.cn/docs/9.4/ddl-partitioning.html#DDL-PARTITIONING-CONSTRAINT-EXCLUSION
  3. 例子参考:http://francs3.blog.163.com/blog/static/4057672720112422436937/
  4. 结合:http://www.cnblogs.com/stephen-liu74/archive/2012/04/27/2291814.html
  5. 查看表大小等操作:http://www.cnblogs.com/liuyuanyuanGOGO/p/3224554.html
  6. 分区表通过继承实现,在对表进行清除数据操作时,要注意是否会同时清除父表和字表:
  7. http://francs3.blog.163.com/blog/static/40576727201011203725668/

PostgreSQL建立分区表示例的更多相关文章

  1. ubuntu server下建立分区表/分区/格式化/自动挂载(转)

    link:http://www.thxopen.com/linux/2014/03/30/Linux_parted.html 流程为:新建分区-->格式化分区-->挂载分区 首先弄明白分区 ...

  2. MSSQL中建立分区表(转载备忘)

    转载自CSDN地址:http://bbs.csdn.net/topics/330087045 SQL Server 2005 分区表实践——建立分区表(partition table) 问题:有一个订 ...

  3. oracle_根据ID(字符型)建立分区表

    方案思路:有一张暴增的数据表(10亿级别),以后需求需要提高单条查询性能, 这个表有个唯一ID, 假设是UUID,采用区分首字母的方法,不同字母的数据入到不同的物理文件中. 第一步: 查找数据库服务器 ...

  4. hive之建立分区表和分区

    1. 建立分区表 create table 单分区表:其中分区字段是partdate,注意分区字段不能和表字段一样,否则会报重复的错 create table test_t2(words string ...

  5. PostgreSQL PARTITION 分区表

    PostgreSQL 分区表,操作性相当便捷. 但只能在创建时决定是否为分区表,并决定分区条件字段,普通表创建后,不能在修改为分区表. Note:通过其他方法也可转化为分区表. 和其他数据库一样,分区 ...

  6. SQL Server 2008 建立分区表 脚本

    /*第一步:创建分区函数*/Create partition function Part_func_Bag(varchar(20)) as range right /*正式区间for values(N ...

  7. Shell脚本运行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell推断hdfs文件文件夹是否存在

    #!/bin/bash source /etc/profile; ################################################## # Author: ouyang ...

  8. SQL分区表示例

    -- Create tablecreate table TT_FVP_OCR_ADDRESS( id NUMBER not null, waybill_no VARCHAR2(32) not null ...

  9. jchdl - 初次使用建立项目示例

    https://mp.weixin.qq.com/s/HaarKjpHan08RUTlEX0XHg   一. 下载并安装JDK 8   下载链接:https://www.oracle.com/tech ...

随机推荐

  1. 【poj1018】 Communication System

    http://poj.org/problem?id=1018 (题目链接) 题意 要买n个产品,每个产品有m种价格和宽度(我也不知道翻译过来到底是什么?),设n个产品的宽度的最小值为B,n个产品的价格 ...

  2. Search and Replace的正则表达式

    以下例子均在Search and Replace中适用,EditPlus也有正则表达式,但有点不一样. 1.1 基本操作符 * 重复0次或更多次 + 重复一次或更多次 ? 重复一次 | 或 操作符 ! ...

  3. BackGroundWorker控件的使用注意

    该控件有三个事件: DoWork .ProgressChanged 和 RunWorkerCompleted 在程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理,当在事件处 ...

  4. ObjC 巧用反射和KVC实现JSON快速反序列化成对象

    1.简单的KVC介绍 KVC是一种间接访问对象属性的机制,不直接调用getter 和 setter方法,而使用valueForKey 来替代getter 方法,setValue:forKey来代替se ...

  5. 王高利:Linux__apache,安装,报错解决

    今日编译apache时出错:#./configure --prefix--检查编辑环境时出现:checking for APR... noconfigure: error: APR not found ...

  6. linux 设置mysql 数据库编码utf8

    转载地址http://www.linuxidc.com/Linux/2015-08/121676.htm在MySQL数据库中, 当插入数据无法支持中文时, 可将该数据库的编码集设置为utf8, 故在创 ...

  7. BZOJ4653: [Noi2016]区间

    传送门 UOJ上卡掉一个点,COGS上卡掉两个点..弃疗,不改了,反正BZOJ上过啦hhh 先把区间按长度递增排序.然后每次用线段树维护区间最大覆盖次数,用一个指针随便扫扫就行了. //NOI 201 ...

  8. StringUtils 的常用方法

    StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 ...

  9. 9.12 其他样式;JS

    Display 显示block和隐藏none,不占位置Visbility 显示visible和隐藏hidden,占位置Overflow 超出范围 hidden隐藏透明圆角 Js脚本语言(JavaScr ...

  10. redis哨兵配置

    redis哨兵配置主从   redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在 ...