postgresql 中分区表的创建及使用样例
2016-01-18 18:02
323 查看
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;
相关文章推荐
- Mysql 从零开始(五)函数之字符串函数
- 完成wamp安装后Mysql配置记录
- 【转】解决MySQL主从复制不一致的情况
- SQL语句总结
- vs2013+ef+orcale更新数据库模型
- 防火墙导致数据库连接中断
- 通过Oracle补充日志,找到锁阻塞源头的SQL
- mysql存储过程详解
- 利用端口转发访问VirtualBox虚拟机中的MySQL
- 执行大事务导致订阅数据库延迟的处理方法
- mysql查询分组归类函数-group_concat,通常与group_by一起使用
- nodejs 安装mysql、socket.io 插件
- Oracle创建DataBase Links
- MongoDB 基础(六)安全性(权限操作)
- MySql Lock wait timeout exceeded
- 【20】MySQL数据库
- oracle标量子查询
- Oracle 获取当前日期及日期格式
- MongoDB学习
- sql锁表