PostgreSQL 15 安装配置pg_partman

安装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:是否启动

您可以在下面找到上述范例的逐步说明:

  1. 修改配置文件,并新增pg_cron至shared_preload_libraries参数值。需要重启数据库
  2. 使用具有 CREATE EXTENSION pg_cron; 许可的账户执行命令授予 rds_superuser权限。这能启用 pg_cron 擴充功能。
  3. 执行命令 UPDATE partman.part_config 用来调整 data_mart.events 表 pg_partman 的设定。
  4. 执行 SET . . . 命令 修改 data_mart.events 中的pg_partman的定时器参数:
    • infinite_time_partitions = true, – 将表设定为没有任何限制,自动创建分区。
    • retention = ‘3 months’, – 将表设置为最多保存按个月。
    • retention_keep_table=true – 到期数据不进行删除,仅仅从分区表剥离。
  5. 执行 SELECT cron.schedule . . . 命令 启动pg_cron。定义定时器 pg_partman 维护程序 partman.run_maintenance_proc 的执行频率。在此範例中,程序會每小時執行一次。

你可能感兴趣的:(PostgreSQL,postgresql)