POSTGRESQL表分区
最近发现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表分区的更多相关文章
- 示例讲解PostgreSQL表分区的三种方式
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...
- 用HAWQ轻松取代传统数据仓库(八) —— 大表分区
一.HAWQ中的分区表 与大多数关系数据库一样,HAWQ也支持分区表.这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面“外部数据”篇讨论.在数据仓库应用中,事 实表通常有非常多 ...
- SQL Server表分区
什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- sql表分区
1.单表达多少条数据后需要分区呢? a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理: b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...
- Oracle10g 表分区
1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...
- oracle11g interval(numtoyminterval())自动创建表分区
Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不 ...
- oracle表分区以及普表转分区表(转)
概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...
- Mysql 表分区
是否支持分区:mysql> show variables like '%partition%';+-----------------------+-------+| Variable_name ...
- SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...
随机推荐
- jquery.jCal.js显示日历插件
描述:日历插件jCal用于需要输入日期的表单文本框. 兼容浏览器:IE浏览器/Firefox/Google Chrome 官方链接: http://www.overset.com/2008/05/1 ...
- Java编解码分析
一.为什么要编解码? 网络或磁盘传输的单位都是字节,平常我们使用的单位都是字符,所以数据需要在字节和字符之间进行转换. 二.编解码概念 1.编码:字符转换成字节 2.解码:字节转换成字符 三.常用字符 ...
- 发展受阻第一至四季/全集Arrested迅雷下载
发展受阻 第一至四季 Arrested Development 1-4 (2013)本季看点:<发展受阻>讲述了一个很有钱的Bluth家庭的故事,主要聚焦家族里的各种古怪事和相互算计带来的 ...
- 《Linux系统编程(第2版)》
<Linux系统编程(第2版)> 基本信息 作者: (美)Robert Love 译者: 祝洪凯 李妹芳 付途 出版社:人民邮电出版社 ISBN:9787115346353 上架时间:20 ...
- 关于MySQL的行转列的简单应用
sql 脚本 -- 创建表 学生表 CREATE TABLE `student` ( `stuid` VARCHAR(16) NOT NULL COMMENT '学号', `stunm` VARCHA ...
- Asp.Net Core获取请求信息/获取请求地址
一.Asp.Net Core 2.0版本中目前HttpRequest是个抽象类 在控制器或视图上下文中获取到的 Request对象,是 DefaultHttpRequest的实例. 定义 如图 : ...
- js转义和反转义html htmlencode htmldecode
文章目录 JS实现HTML标签转义及反转义 用Javascript进行HTML转义 1.HTML转义 2.反转义 3.一个有意思的认识 4.完整版本的代码 其他 [转义字符]HTML 字符实体< ...
- idea 2018.1破解激活方法,有效期至2099年 idea 激活 破解
最近笔者测试了好多破解Idea的方法,最简单操作方法莫过于用license server激活,但是此类方法对最新的2017.3.2版已经无效了,亲测哦,如下图所示. 针对新版的IntelliJ ID ...
- java 小程序查看器 启动:未初始化小程序 解决方法
欢迎大家转载.为保留作者成果,转载请注明出处,http://blog.csdn.net/netluoriver,有些文件在资源中也能够下载.假设你没有积分.能够联系我索要! 在执行java程序的时候突 ...
- oracle 索引的(创建、简介、技巧、怎样查看)
一.索引简介1.索引相当于目录2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率.3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取值分散 ...