安装pg_partman
国内镜像下载
https://gitee.com/mirrors/Pg-Partman/repository/archive/v4.7.1.zip
https://gitee.com/mirrors/pg_cron/repository/archive/v1.4.2.zip
编译安装
chown -R postgres:postgres /usr/MyWorkSpace/Pg-Partman-v4.7.1
cd /usr/MyWorkSpace/Pg-Partman-v4.7.1
make && make install
cd /usr/MyWorkSpace/pg_cron-v1.4.2
make && make install
修改pgsql配置文件postgresql.conf
shared_preload_libraries = 'pg_cron,pg_partman_bgw'
CREATE SCHEMA partman;
CREATE EXTENSION pg_partman WITH SCHEMA partman;
create extension pg_cron WITH DATABASE postgres;
使用pg_partman
使用create_parent
-- Create table
create table DATAALY.BDWEBSERVICE_DATAALYSIS
(
userid VARCHAR(100) not null,
realtime DATE,
channelid VARCHAR(100),
videoname VARCHAR(3000),
type VARCHAR(2),
channelstatus DATE default now()::timestamp(0)without time zone,
version VARCHAR(20),
stbtype VARCHAR(100),
groupid VARCHAR(40)
)
partition by range (REALTIME);
# 添加定时器每天增加分区 需要预先安装插件pg_partman,pg_cron
# 特别注意,所有的参数值必须小写否则报错 创建前三天后三天数据
SELECT partman.create_parent( p_parent_table => 'dataaly.bdwebservice_dataalysis',
p_control => 'realtime',
p_type => 'native',
p_interval=> 'daily',
p_premake => 3);
参数如下:
- p_parent_table – 父项分割表格。此表必须已经存在,并且格式正确 (包括結構描述)。
- p_control – 分区字段。必须为日期或者整数。
- p_type –类型可以是 ‘native’ 或 ‘partman’。您通常使用 native 类型改善灵活性。partman 是靠继承实现。
- p_interval – 每个分区的时间间隔或证书范围。范围值包括 daily、每小時等。
- p_premake – 预先建立的分区数。
使用run_maintenance_proc
他可以自动执行分区作业维护,包括新建、分离和移除旧的分区。分区维护依赖 pg_partman 扩充功能 run_maintenance_proc 函数和 pg_cron 扩充功能,他们启动内部定时器。pg_cron定时执行SQL的函数和定时器。
# 注意 以下SQL 必须在postgres数据库下进行,因为pg_cron只能安装在postgres
CREATE EXTENSION pg_cron;
UPDATE partman.part_config
SET infinite_time_partitions = true,
retention = '3 days',
retention_keep_table=false
WHERE parent_table = 'dataaly.bdwebservice_dataalysis';
SELECT cron.schedule_in_database('BDWEBSERVICE_DATAALYSIS_JOB','@hourly', $$CALL partman.run_maintenance_proc()$$,'realdb');
# 更新定时器
SELECT cron.alter_job(1,'30 2 * * *', $$CALL partman.run_maintenance_proc()$$,'realdb');
参数如下:
job_name:job名称
schedule:定时方式
command:执行命令
database:数据库
username:执行用户
active:是否启动
您可以在下面找到上述范例的逐步说明:
- 修改配置文件,并新增pg_cron至shared_preload_libraries参数值。需要重启数据库
- 使用具有 CREATE EXTENSION pg_cron; 许可的账户执行命令授予 rds_superuser权限。这能启用 pg_cron 擴充功能。
- 执行命令 UPDATE partman.part_config 用来调整 data_mart.events 表 pg_partman 的设定。
- 执行 SET . . . 命令 修改 data_mart.events 中的pg_partman的定时器参数:
- infinite_time_partitions = true, – 将表设定为没有任何限制,自动创建分区。
- retention = ‘3 months’, – 将表设置为最多保存按个月。
- retention_keep_table=true – 到期数据不进行删除,仅仅从分区表剥离。
- 执行 SELECT cron.schedule . . . 命令 启动pg_cron。定义定时器 pg_partman 维护程序 partman.run_maintenance_proc 的执行频率。在此範例中,程序會每小時執行一次。