postgresql分区表的使用
2016-01-19 10:04
399 查看
create table maintb(id int,name varchar(10));
create table childtb_1 (CHECK ( id BETWEEN 1 AND 200)) inherits(maintb);
create table childtb_2 (CHECK ( id BETWEEN 201 AND 400)) inherits(maintb);
create table childtb_3 (CHECK ( id BETWEEN 401 AND 600)) inherits(maintb);
create table childtb_4 (CHECK ( id BETWEEN 601 AND 800)) inherits(maintb);
create table childtb_5 (CHECK ( id BETWEEN 801 AND 1000)) inherits(maintb);
CREATE INDEX childtb_idx_1 ON childtb_1 (id);
CREATE INDEX childtb_idx_2 ON childtb_2 (id);
CREATE INDEX childtb_idx_3 ON childtb_3 (id);
CREATE INDEX childtb_idx_4 ON childtb_4 (id);
CREATE INDEX childtb_idx_5 ON childtb_5 (id);
--创建存储过程
CREATE OR REPLACE FUNCTION maintb_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF( NEW.id BETWEEN 1 AND 200 ) THEN
INSERT INTO childtb_1 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 201 AND 400 ) THEN
INSERT INTO childtb_2 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 401 AND 600 ) THEN
INSERT INTO childtb_3 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 601 AND 800 ) THEN
INSERT INTO childtb_4 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 801 AND 1000 ) THEN
INSERT INTO childtb_5 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'id out of range!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
--创建触发器
CREATE TRIGGER insert_maintb_trigger
BEFORE INSERT ON maintb
FOR EACH ROW EXECUTE PROCEDURE maintb_insert_trigger();
CREATE TRIGGER insert_maintb_trigger
BEFORE INSERT ON maintb
FOR EACH ROW EXECUTE PROCEDURE maintb_insert_trigger();
insert into maintb values(1,'abcde12345');
insert into maintb values(300,'abcde300');
--对分区表的查询进行分析
explain (format json) select * from maintb where id=2;
create table childtb_1 (CHECK ( id BETWEEN 1 AND 200)) inherits(maintb);
create table childtb_2 (CHECK ( id BETWEEN 201 AND 400)) inherits(maintb);
create table childtb_3 (CHECK ( id BETWEEN 401 AND 600)) inherits(maintb);
create table childtb_4 (CHECK ( id BETWEEN 601 AND 800)) inherits(maintb);
create table childtb_5 (CHECK ( id BETWEEN 801 AND 1000)) inherits(maintb);
CREATE INDEX childtb_idx_1 ON childtb_1 (id);
CREATE INDEX childtb_idx_2 ON childtb_2 (id);
CREATE INDEX childtb_idx_3 ON childtb_3 (id);
CREATE INDEX childtb_idx_4 ON childtb_4 (id);
CREATE INDEX childtb_idx_5 ON childtb_5 (id);
--创建存储过程
CREATE OR REPLACE FUNCTION maintb_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF( NEW.id BETWEEN 1 AND 200 ) THEN
INSERT INTO childtb_1 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 201 AND 400 ) THEN
INSERT INTO childtb_2 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 401 AND 600 ) THEN
INSERT INTO childtb_3 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 601 AND 800 ) THEN
INSERT INTO childtb_4 VALUES (NEW.*);
ELSIF( NEW.id BETWEEN 801 AND 1000 ) THEN
INSERT INTO childtb_5 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'id out of range!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
--创建触发器
CREATE TRIGGER insert_maintb_trigger
BEFORE INSERT ON maintb
FOR EACH ROW EXECUTE PROCEDURE maintb_insert_trigger();
CREATE TRIGGER insert_maintb_trigger
BEFORE INSERT ON maintb
FOR EACH ROW EXECUTE PROCEDURE maintb_insert_trigger();
insert into maintb values(1,'abcde12345');
insert into maintb values(300,'abcde300');
--对分区表的查询进行分析
explain (format json) select * from maintb where id=2;
相关文章推荐
- 数据库 三范式最简单最易记的解释
- Maven 整合 SpringMvc Spring Hibernate +oracle
- 安装Hive(独立模式 使用mysql连接)
- django操作mysql时django.db.utils.OperationalError: (2003, "Can't connect to MySQL server")异常的解决方法
- Mysql 数据库备份权限
- mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?
- MySQL数据库
- 数据库性能优化之SQL语句优化
- Oracle In-Memory 行列双格式
- MongoDB的本地化排序
- mysql错误删除默认root用户解决办法
- postgresql数据库安装二(二进制包安装)
- sql server中sql语句中单引号怎么转义?【转】
- Oracle钱夹的使用
- postgresql数据库的安装一(源码编译)
- 根据数据库输出XML菜单
- MySQL逗号分割字段的行列转换技巧
- 用PL/SQL Developer创建Oracle触发器以及触发器的一点点知识与出现的问题
- Sqlite入门
- ORACLE日期时间函数大全(处理日期、字符、数字转换等函数用法)