PostgreSQL需要定时清理旧数据的解决方法

前言

最近leader觉得数据库中每日数据不需要都保持,只需要保留30天的,就让我去研究下。坑是真的大,最后才勉强实现,故记录一下。

技术涉及:docker docker-conpose SQL pgadmin4 pgagent

环境说明

我们的数据库是部署是使用docker-conponse直接部署在服务器上的,默认为debain。

postgre为14,所以下面默认你已经在docker中安装了数据库

1、对原来的docker---compose进行修改

在原来的基础上添加:

yaml 复制代码
pgadmin: 
    container_name: pgadmin4_container 
    image: dpage/pgadmin4 
    restart: always 
    environment: 
        PGADMIN_DEFAULT_EMAIL: <admin@admin.com> PGADMIN_DEFAULT_PASSWORD: root 
    ports: - "5050:80"

添加完毕后,重启下容器

复制代码
docker-compose up -d

这个时候我们访问下服务器ip:5050就能看到一个可视化的数据库管理页面

2、pgadmin基本操作

输入账号和密码:admin@admin.com、root

登陆成功

(修改中文为:左上角-FILE-Preferences-User language-Chinese)

右击Servers-创建-服务器

输入对应的ip账号密码,就可以看到自己的数据库了。

3、安装pgagent插件(重点)

你需要进入postgres容器、环境配置、安装pgagent、pgagent配置

csharp 复制代码
docker-compose exec pgsql bash # 进入容器
apt-get update # 更新源
apt install vim # 安装vim工具
apt /etc/apt/sources.list # 进入系统源配置文件把原来的注释了添加

deb <http://mirrors.aliyun.com/debian/> bullseye main deb 
<http://mirrors.aliyun.com/debian-security> bullseye-security main deb 
<http://mirrors.aliyun.com/debian> bullseye-updates main
# 修改成国内源

apt-get update
apt install pgagent # 安装pgagent
psql -U postgres -h localhost # 创建db扩展
CREATE EXTENSION pgagent; 
\q 
exit
# 在postgres数据库上启用pgagent:
pgagent hostaddr=127.0.0.1 dbname=postgres user=postgres password=***** 
# 和你的docker-conpose保持一致就好

如果输入pgagent hostaddr...指令没有报错的话就安装插件完毕了。

这个时候你再去访问pgadmin就可以看到

即pgagent配置完毕!

4、定时任务的开启和清理的sql语句

鼠标右击pgAgent任务-创建-pgAgent作业...

输入名称后,点击步骤

由于我是本地所以连接字符串不需要(按照你的需求来) 在代码中添加

sql 复制代码
FOR tbl_name IN SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'position_record_%' AND table_name ~ '\d{8}' LOOP
  EXECUTE format('DELETE FROM public.%I WHERE date_column < current_date - interval ''30 days''', tbl_name);
END LOOP;

这个清理的具体逻辑按照你实际情况来

这样就是一天执行一次,按照你的需求来,如果是小时为00分钟为30,那就是到30分钟就清理一次(一小时)

点击保存就好了。

这里可以看到配置的状态

尾声

我就是简单配置下,看看会不会生效。如果可以的话,我将把定时备份数据库的操作也放到上面去。如果我上的有错,也会修改。

相关推荐
❀͜͡傀儡师7 小时前
docker一键部署kafka
docker·容器·kafka
IT运维爱好者7 小时前
【国产】华为欧拉操作系统openEuler-LTS-22.03安装Docker-Compose保姆级教程
docker·容器·openeuler·欧拉
我叫安查查7 小时前
在Ubuntu系统上使用docker部署GPUStack教程【亲测成功】
linux·ubuntu·docker·gpustack
脑壳疼___8 小时前
ubuntu安装postgresql、postgis、pgrouting
linux·ubuntu·postgresql
晨欣8 小时前
Dify Custom Tool 调用超时问题排查与解决方案(claude-4.5-opus-high)
docker·容器·dify
betazhou8 小时前
docker容器单机创建3个节点的MySQLMGR集群
运维·mysql·docker·容器·集群·mgr
Hello.Reader8 小时前
Flink SQL 中的 ORDER BY 子句批处理 vs 流处理的排序语义
大数据·sql·flink
Logic1018 小时前
《Mysql数据库应用》 第2版 郭文明 实验4 视图和索引的构建与使用核心操作与思路解析
数据库·sql·mysql·学习笔记·计算机网络技术·形考作业·国家开放大学
赵庆明老师8 小时前
.net framework 的项目部署到docker
docker·eureka·.net
帝吃藕和8 小时前
MySQL 知识点复习- 5. UNION
sql