1、用PSQL链接数据库,创建测试表,插入测试数据。- 表名:schema_a.log衡痕贤伎s模拟日志表- 列: id -- 唯一标识- 列: l髫潋啜缅evel -- 日志级别- 列: content -- 日志内容- 列: created -- 日志创建时间代码: create table schema_a.logs(id bigint, level char(1), content varchar, created date);
2、在Postgresql里表分区由表继承来实现的,就是一个空的主表, 然后创建分区来妤伊佛集继承主表。我们由created字段来进行分区,2016年以前的数据很少用到,我们将之完全分在分庐舌垩卫区表logs_2016_before中,2016年到现在每个月为一个分区。由于只是测试,我们就建立四个分区表:分区1: logs_2016_before分区2: logs_201601分区3: logs_201602分区4: logs_201603代码:create table schema_a.logs_2016_before(check(created<DATE'2016-01-01')) INHERITS (schema_a.logs);
3、给分区表created建立索引。代码:create index ix_logs_201601_created on schema_a.logs_201601 (created);
4、采取触发器的形式来保证分区表对开发人员的透明性。创建触发器函数logs_insert_trigger,当向主表(logs表)插入数据时,转为插入到相应的分区表。
5、测试插入数据。我们可以看到插入的数据已经插入到相应的分区表中了。当查询不带日期条件时,会扫描所有的表,带上时则只查询相应的子表并且使用我们前面所建立的索引。所以在使用分区表查询时,一定要带上分区条件(即本文中"created")。