PostgreSQL定时清理旧数据的实现方法

 更新时间:2024年03月13日 09:11:14   作者:总比一事无成的好  
最近觉得数据库中每日数据不需要都保持,只需要保留30天的,所以这篇文章给大家介绍了PostgreSQL定时清理旧数据的实现方法,文中通过代码示例和图文给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

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

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

环境说明

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

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

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

在原来的基础上添加:

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就能看到一个可视化的数据库管理页面

记得在postgres中添加以下sql代码

CREATE OR REPLACE FUNCTION delete_old_data() RETURNS void AS $$
DECLARE
tbl_name record;
table_date date;
BEGIN
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
table_date := to_date(substring(tbl_name.table_name from '\d{8}'), 'YYYYMMDD');
IF table_date < current_date - 30 THEN
EXECUTE format('DROP TABLE IF EXISTS public.%I', tbl_name.table_name);
END IF;
END LOOP;
END;
$$ LANGUAGE plpgsql;

2、pgadmin基本操作

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

登陆成功

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

右击Servers-创建-服务器

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

3、安装pgagent插件(重点)

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

docker-compose exec pgsql bash # 进入容器
apt-get update # 更新源
apt install vim # 安装vim工具
vim /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作业...

输入名称后,点击步骤

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

SELECT delete_old_data();

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

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

点击保存就好了。

这里可以看到配置的状态

尾声

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

以上就是PostgreSQL定时清理旧数据的实现方法的详细内容,更多关于PostgreSQL定时清理旧数据的资料请关注程序员之家其它相关文章!

相关文章

  • PostgreSQL树形结构的递归查询示例

    PostgreSQL树形结构的递归查询示例

    这篇文章主要给大家介绍了关于PostgreSQL树形结构的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Mybatis调用PostgreSQL存储过程实现数组入参传递

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    这篇文章主要介绍了mybatis调用postgresql自定义函数传递数组参数的解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • PostgreSQL与MySQL优劣势比较浅谈

    PostgreSQL与MySQL优劣势比较浅谈

    这篇文章主要详细介绍了PostgreSQL与MySQL有哪些优劣势,文中介绍的非常详细,对于学习有一定的帮助,感兴趣的小伙伴可以参考一下
    2023-04-04
  • postgreSQL中的case用法说明

    postgreSQL中的case用法说明

    这篇文章主要介绍了postgreSQL中的case用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL查找并删除重复数据的方法总结

    PostgreSQL查找并删除重复数据的方法总结

    这篇文章主要给大家介绍了PostgreSQL查找并删除重复数据的方法,文章通过代码示例介绍的非常详细,对大家的学习或工作有一点的帮助,需要的朋友可以参考下
    2023-10-10
  • Postgresql?REGEXP开头的正则函数用法图文详解

    Postgresql?REGEXP开头的正则函数用法图文详解

    正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,下面这篇文章主要给大家介绍了关于Postgresql?REGEXP开头的正则函数用法的相关资料,需要的朋友可以参考下
    2024-02-02
  • PostgreSQL查看版本信息的操作

    PostgreSQL查看版本信息的操作

    这篇文章主要介绍了PostgreSQL查看版本信息的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 解决sqoop import 导入到hive后数据量变多的问题

    解决sqoop import 导入到hive后数据量变多的问题

    这篇文章主要介绍了解决sqoop import 导入到hive后数据量变多的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL更新表时时间戳不会自动更新的解决方法

    PostgreSQL更新表时时间戳不会自动更新的解决方法

    这篇文章主要为大家详细介绍了PostgreSQL更新表时时间戳不会自动更新的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • PostgreSQL时间日期的语法及注意事项

    PostgreSQL时间日期的语法及注意事项

    在开发过程中,经常要取日期的年,月,日,小时等值,PostgreSQL 提供一个非常便利的EXTRACT函数,这篇文章主要给大家介绍了关于PostgreSQL时间日期的语法及注意事项的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论

?


http://www.vxiaotou.com