pg分区表一

摘要:
PostgreSQL的分区表创建较Oracle分区表复杂些,需要借助创建继承表和触发器的模式实现,具体创建方法可以参照以下实验,供参考。

PostgreSQL的分区表创建较Oracle分区表复杂些,需要借助创建继承表和触发器的模式实现, 具体创建方法可以参照以下实验, 供参考。

创建父表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE fenqu_table (  
id integer NOT NULL,
mcc character varying(5),
lac character varying(8),
mnc character(2),
cellid character varying(8),
signal integer,
antennaheight integer,
cellpower integer,
addtime timestamp(0) without time zoneDEFAULT now(),
cellidfrom character varying(200),
address character varying(200),
mark integerDEFAULT 100,
fail_times integerDEFAULT 0,
success_times integerDEFAULT 0,
skyid integerDEFAULT 0,
mapaddress character varying(200)
);
创建子表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
CREATE TABLE fenqu_table_p200905 (  
id integer,
mcc character varying(5),
lac character varying(8),
mnc character(2),
cellid character varying(8),
signal integer,
antennaheight integer,
cellpower integer,
addtime timestamp(0) without time zone,
cellidfrom character varying(200),
address character varying(200),
mark integer,
fail_times integer,
success_times integer,
skyid integer,
mapaddress character varying(200),
CONSTRAINT fenqu_table_p200905_addtime_check CHECK (((addtime >= '2009-05-01 00:00:00'::timestamp without time zone) AND (addtime < '2009-06-01 00:00:00'::timestamp without time zone)))
)
INHERITS (fenqu_table);

CREATE TABLE fenqu_table_p200906 (
id integer,
mcc character varying(5),
lac character varying(8),
mnc character(2),
cellid character varying(8),
signal integer,
antennaheight integer,
cellpower integer,
addtime timestamp(0) without time zone,
cellidfrom character varying(200),
address character varying(200),
mark integer,
fail_times integer,
success_times integer,
skyid integer,
mapaddress character varying(200),
CONSTRAINT fenqu_table_p200906_addtime_check CHECK (((addtime >= '2009-06-01 00:00:00'::timestamp without time zone) AND (addtime < '2009-07-01 00:00:00'::timestamp without time zone)))
)
INHERITS (fenqu_table);

CREATE TABLE fenqu_table_p200907 (
id integer,
mcc character varying(5),
lac character varying(8),
mnc character(2),
cellid character varying(8),
signal integer,
antennaheight integer,
cellpower integer,
addtime timestamp(0) without time zone,
cellidfrom character varying(200),
address character varying(200),
mark integer,
fail_times integer,
success_times integer,
skyid integer,
mapaddress character varying(200),
CONSTRAINT fenqu_table_p200907_addtime_check CHECK (((addtime >= '2009-07-01 00:00:00'::timestamp without time zone) AND (addtime < '2009-08-01 00:00:00'::timestamp without time zone)))
)
INHERITS (fenqu_table);
创建数据删除触发器函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION public.fenqu_table_delete_trigger()  
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF ( OLD.addtime>='2009-05-01' and OLD.addtime<'2009-06-01' ) THEN
DELETE FROM fenqu_table_p200905 where cretime=OLD.cretime;
ELSIF ( OLD.addtime>='2009-06-01' and OLD.addtime<'2009-07-01' ) THEN
DELETE FROM fenqu_table_p200906 where cretime=OLD.cretime;
ELSIF ( OLD.addtime>='2009-07-01' and OLD.addtime<'2009-08-01' ) THEN
DELETE FROM fenqu_table_p200907 where cretime=OLD.cretime;
ELSE
RAISE EXCEPTION 'addtime out of range. Fix the fenqu_table_delete_trigger() function!';
END IF;
RETURN NULL;
END;
$function$
创建数据插入触发器函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE OR REPLACE FUNCTION public.fenqu_table_insert_trigger()  
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF ( NEW.addtime>='2009-05-01' and NEW.addtime<'2009-06-01' ) THEN
INSERT INTO fenqu_table_p200905 VALUES (NEW.*);
ELSIF ( NEW.addtime>='2009-06-01' and NEW.addtime<'2009-07-01' ) THEN
INSERT INTO fenqu_table_p200906 VALUES (NEW.*);
ELSIF ( NEW.addtime>='2009-07-01' and NEW.addtime<'2009-08-01' ) THEN
INSERT INTO fenqu_table_p200907 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'addtime out of range. Fix the fenqu_table_insert_trigger() function!';
END IF;
RETURN NULL;
END;
$function$
创建数据插入、删除触发器
1
2
create trigger delete_fenqu_table_trigger BEFORE DELETE ON fenqu_table FOR EACH ROW EXECUTE PROCEDURE fenqu_table_delete_trigger();  
create trigger insert_fenqu_table_trigger BEFORE INSERT ON fenqu_table FOR EACH ROW EXECUTE PROCEDURE fenqu_table_insert_trigger();

create sequence

1
2
3
4
create sequence fenqu_table_id_seq  
INCREMENT by 1
MINVALUE 1
start with 1;
分区表测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mydb=>insert into fenqu_table (id,addtime) values (nextval('fenqu_table_id_seq'),'2009-05-01 00:00:00');  
INSERT 0 0

mydb=>select count(*) from fenqu_table;
count
-------
1
(1 row)

mydb=>select count(*) from only fenqu_table;
count
-------
0
(1 row)

mydb=>select count(*) from fenqu_table_p200905;
count
-------
1
(1 row)

免责声明:文章转载自《pg分区表一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇对List取交集、联集及差集DLL发布 matlab代码发布下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

orcl 如何快速删除表中百万或千万数据

orcl 数据库表中数据达到上千万时,已经变的特别慢了,所以时不时需要清掉一部分数据。 bqh8表中目前有10000000条数据,需要保留19条数据,其余全部清除掉。 以下为个人方法: 1、首先把需要保留的数据备份到temp1临时表中。 create table temp1 as select * from bqh8 where id<20;sele...

mysql通过binlog恢复删除数据

删除误操作有时会意外出现,如果你有备份表数据的好习惯,那么至少你可以追回备份前的那些数据。如果我们打开了mysql的binlog,那么可以通过它的增量操作日志来恢复数据。怎么打开binlog前篇已有说明(参见windows下打开binlog),这里举例说明如何通过binlog进行恢复: 1、看下当前的binlog位置,这里称为位置1: mysql>s...

Qt 杂记——QTableWidget列表添加、删除(备份)

1.列表的添加 需求:向一个有两列的Table中添加一条数据 思路:新建一个inputDialog,通过按钮打开Qt自带的inputDialog,传递回输入的数据,再添加到列表中 界面: 代码: inputDialog.h   #ifndef INPUTDIALOG_H #define INPUTDIALOG_H #include <QDialog...

第12章 DOM操作

目录 *1. 向DOM中注入HTML 1.1 将HTNL字符串转换成DOM 预处理HTML源字符串 包装HTML 1.2 将DOM元素插入到文档中 2. DOM的特性和属性通过DOM方法和属性访问特性值 3. 令人头疼的样式特性 3.1 样式在何处 3.2 样式属性命名一种访问样式的简单方法 3.3 获取计算后样式 3.4 测量元...

react + antd Table实现表格数据合并

效果如下 其实这种情况也可以使用树形数据表格展示,但是表格合并展示,看起来更直观.反正产品说哪种展示就哪种展示吧 我这里用到两种类型的后台数据,一种是一维数组数据,一种是有层级的二维数组. 表格合并最后要用到的数据都是一维数据,所以需要对数据处理一下.这两种处理方式对data数据从后台接口获取也一样适用 上代码,项目是react+typescr...

Mybatis自动生成Xml文件,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题

默认情况下产生的Mapper.xml里面存在: 需要修改generatorConfiguration.xml,里面的table加属性,如: <table domainObjectName="User" tableName="test_user"> <columnOverride column="address" javaTyp...