✔ 范围分区/range分区
-- 创建表
drop table if exists zzt.par_range;
create table if not exists zzt.par_range (
empno integer,
ename char(10),
job char(9),
mgr integer(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno integer,
constraint pk_par_emp primary key (empno,deptno)
) tablespace ts_zzt
partition by range(deptno) --分区键必须在主键中
(
PARTITION P1 VALUES LESS THAN(11),
PARTITION P2 VALUES LESS THAN(21),
PARTITION P3 VALUES LESS THAN(31)
)
ENABLE ROW MOVEMENT;
-- 插入数据
insert into zzt.par_range select * from zzt.emp;
-- 查验
select * from zzt.par_range partition(p1);
select * from pg_catalog.pg_partition p order by p.parentid,p.relfilenode;
✔ 间隔分区/interval分区
-- 创建表
drop table if exists zzt.par_inter;
create table if not exists zzt.par_inter
( id serial,
time DATE,
others varchar(20)
)
PARTITION BY RANGE (time)
INTERVAL('1 day')
( PARTITION p1 VALUES LESS THAN (TO_DATE('2021-1-2', 'YYYY-MM-DD')),
PARTITION p2 VALUES LESS THAN (TO_DATE('2021-1-3', 'YYYY-MM-DD')),
PARTITION p3 VALUES LESS THAN (TO_DATE('2021-1-4', 'YYYY-MM-DD')));
-- 插入数据
insert into zzt.par_inter values(1,to_date('2021-01-01 10:00:00','yyyy-mm-dd hh24:mi:ss'),'a'); --由于是less than所以分区大1天
insert into zzt.par_inter values(2,to_date('2021-01-20 20:00:00','yyyy-mm-dd hh24:mi:ss'),'a'); --测试自动分区的跨天能力
insert into zzt.par_inter values(3,to_date('2021-01-20 10:00:00','yyyy-mm-dd hh24:mi:ss'),'a'); --测试自动分区的跨天能力
insert into zzt.par_inter values(4,to_date('2022-02-02 10:00:00','yyyy-mm-dd hh24:mi:ss'),'a'); --测试自动分区的跨年能力
insert into zzt.par_inter values(5,to_date('2023-03-03 10:00:00','yyyy-mm-dd hh24:mi:ss'),'a'); --测试自动分区的跨年能力
commit;
-- 查验
select * from zzt.par_inter partition(p1);
select * from pg_catalog.pg_partition p order by p.parentid,p.relfilenode;
✔ 哈希分区/hash分区
-- 创建表
drop table if exists zzt.par_hash;
create table if not exists zzt.par_hash (
empno integer,
ename char(10),
job char(9),
mgr integer(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno integer
) tablespace ts_zzt
partition by hash(deptno)
(
PARTITION p1,
PARTITION p2,
PARTITION p3
);
-- 插入数据
insert into zzt.par_hash select * from zzt.emp;
-- 查验
select * from zzt.par_hash partition(p1);
select * from pg_catalog.pg_partition p order by p.parentid,p.relfilenode;
✔ 列表分区/list分区
-- 创建表
drop table if exists zzt.par_list;
create table if not exists zzt.par_list (
empno integer,
ename char(10),
job char(9),
mgr integer(4),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno integer
) tablespace ts_zzt
partition by list(deptno)
(
PARTITION p1 values(10),
PARTITION p2 values(20),
PARTITION p3 values(30)
);
-- 插入数据
insert into zzt.par_list select * from zzt.emp;
-- 查验
select * from zzt.par_list partition(p1);
select * from pg_catalog.pg_partition p order by p.parentid,p.relfilenode;
※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~