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分钟就清理一次(一小时)

点击保存就好了。

这里可以看到配置的状态

尾声

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

相关推荐
山岚的运维笔记2 小时前
SQL Server笔记 -- 第77章:文件组
数据库·笔记·sql·microsoft·oracle·sqlserver
l1t4 小时前
DeepSeek总结的PostgreSQL 19新功能:第二部分
数据库·postgresql
赵鑫亿4 小时前
ClawPanel v4.4.0 发布:AI 智能助手 + 模型兼容性修复 + UI 优化
人工智能·ui·docker·容器·qq·openclaw
啊哈哈121386 小时前
SQL学习笔记7:综合查询与高级技巧全解析 + LeetCode实战
笔记·sql·学习
PieroPc6 小时前
用html+css+js 写一个Docker 教程
javascript·css·docker·html
芥子沫6 小时前
《玩转Docker》[应用篇18]:项目管理应用推荐LeanTime安装部署和使用
docker·项目管理
愚公搬代码7 小时前
【愚公系列】《数据可视化分析与实践》019-数据集(自定义SQL数据集)
数据库·sql·信息可视化
lzhdim8 小时前
SQL 入门 2:LIKE、正则、 ORDER BY 与LIMIT
数据库·sql·mysql
青衫码上行8 小时前
高频 SQL 50题(基础版)| 连接
数据库·sql·mysql
xyzhan8 小时前
SQL Server - 列出数据库中所有固定长度字段
数据库·sql·oracle·sql server