最近发现POSTGRESQL的一张表(下面统称为test表)达到67G大小,不得不进行重新分区,下面记录一下步骤:

前言、查看数据表结构(表结构肯定是虚构的)

CREATE TABLE test
(
id integer NOT NULL DEFAULT ,
logday character varying, -- 登录日期
CONSTRAINT test PRIMARY KEY (id)
);

一、正式开始-在dw模式下面创建这个父亲表

CREATE TABLE dw.test
(
id integer NOT NULL DEFAULT ,
logday character varying, -- 登录日期,发现了吧,tmd是字符类型的
CONSTRAINT test PRIMARY KEY (id)
);

二、创建子表,你会发现有CHECK,这就是说2013-06月的继承到子表

--创建子表
CREATE TABLE dw.testl_yy13mm06 ( CHECK ( substring(logday from for ) = '2013-06' )) INHERITS (dw.test);
CREATE TABLE dw.test_yy13mm07 ( CHECK ( substring(logday from for ) = '2013-07' )) INHERITS (dw.test); --创建索引,其实这个索引是建立在dw模式里面的,删除的时候需要执行:DROP INDEX dw.idx_test_yy13mm06,我就吃过这个亏,没加dw模式
CREATE INDEX idx_test_yy13mm06 ON dw.test_yy13mm06 (logday);
CREATE INDEX idx_test_yy13mm07 ON dw.test_yy13mm07 (logday);

三、创建触发器

CREATE OR REPLACE FUNCTION test_insert_trigger()
RETURNS TRIGGER AS
$$
BEGIN
IF(substring(NEW.logday from for ) = '2013-06') THEN
INSERT INTO dw.touch_ticket_channel_yy13mm06 VALUES (NEW.*);
ELSIF (substring(NEW.logday from for ) = '2013-07') THEN
INSERT INTO dw.touch_ticket_channel_yy13mm07 VALUES (NEW.*);
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql ;

四、关联触发器,这样在执行inert语句之前就执行这个触发器了

CREATE TRIGGER test_insert_trigger
BEFORE INSERT ON dw.test
FOR EACH ROW EXECUTE PROCEDURE test_insert_trigger();

五、插入测试数据

insert into dw.test ( SELECT * FROM test);

执行之后就把public模式下面的test表整体迁移到dw模式下的test表里面了

参考:http://www.php100.com/manual/PostgreSQL8/ddl-partitioning.html

续:

我上面犯了一个特别致命的错误,虽然使用函数substring实现了分区,但是查找的时候,没有直接走分区块。比如:SELECT * FROM test WHERE logday = '20174-07-01',所以这条语句需要全表扫描,解决办法:

CHECK substring(NEW.logday from  for ) = '2013-06'

修改为:

CHECK ( logday >= '2013-06-01' AND logday <'2013-07-01' )

当然触发器也要做出一样的调整!~

POSTGRESQL表分区的更多相关文章

  1. 示例讲解PostgreSQL表分区的三种方式

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...

  2. 用HAWQ轻松取代传统数据仓库(八) —— 大表分区

    一.HAWQ中的分区表        与大多数关系数据库一样,HAWQ也支持分区表.这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面“外部数据”篇讨论.在数据仓库应用中,事 实表通常有非常多 ...

  3. SQL Server表分区

    什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...

  4. sql表分区

    1.单表达多少条数据后需要分区呢?   a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理:   b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...

  5. Oracle10g 表分区

    1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...

  6. oracle11g interval(numtoyminterval())自动创建表分区

    Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...

  7. oracle表分区以及普表转分区表(转)

    概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...

  8. Mysql 表分区

    是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...

  9. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

随机推荐

  1. Oracle Apps DBA R12.2 Syllabus

    1. What is Oracle R12.2 R12.2 Definition Architecture Advantages of R12.2 Limitations of R12.2 What ...

  2. Informix 常用函数

    一.内部函数 1.内部合计函数 1)COUNT(*) 返回行数 2)COUNT(DISTINCT COLNAME) 返回指定列中唯一值的个数 3)SUM(COLNAME/EXPRESSION) 返回指 ...

  3. 【python】安装Python 的IDE--PyCharm

    [百度网盘-技术-pycharm破解需要的有安装包和破解jar] ================================================== 安装Tensorflow开发环境 ...

  4. HDU 1575 Tr A(矩阵高速幂)

    题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...

  5. ibatis.net:第二天,Hello,World ?

    背景 本文的内容全部来自于官方的文档,此处仅仅为了强化记忆. 项目结构 Properties.config <?xml version="1.0" encoding=&quo ...

  6. 《iOS 7 应用开发实战详解》

    <iOS 7 应用开发实战详解> 基本信息 作者: 朱元波    管蕾 出版社:人民邮电出版社 ISBN:9787115343697 上架时间:2014-4-25 出版日期:2014 年5 ...

  7. Android系统版本与API等级对应关系表

    从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/manifest/uses-sdk-element.htm ...

  8. [转]Hive安装及使用攻略

    转 : http://blog.fens.me/hadoop-hive-intro/

  9. [转]用 jQuery 实现页面滚动(Scroll)效果的完美方法

    转自: http://zww.me/archives/25144 很多博主都写过/转载过用 jQuery 实现页面滚动(Scroll)效果的方法,但目前搜来的方法大都在 Opera 下有个小 Bug: ...

  10. glyphicons-halflings-regular.woff2:1 Failed to load resource: the server responded with a status of 404 (Not Found)解决Web部署 svg/woff/woff2字体 404错误

    问题:最近在IIS上部署web项目的时候,发现浏览器总是报找不到woff.woff2字体的错误.导致浏览器加载字体报404错误,白白消耗了100-200毫秒的加载时间. 原因:因为服务器IIS不认SV ...