PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法
前言
最近leader覺得數(shù)據(jù)庫中每日數(shù)據(jù)不需要都保持,只需要保留30天的,就讓我去研究下??邮钦娴拇螅詈蟛琶銖妼崿F(xiàn),故記錄一下。
技術(shù)涉及:docker docker-conpose SQL pgadmin4 pgagent
環(huán)境說明
我們的數(shù)據(jù)庫是部署是使用docker-conponse直接部署在服務(wù)器上的,默認為debain。
postgre為14,所以下面默認你已經(jīng)在docker中安裝了數(shù)據(jù)庫
1、對原來的docker—compose進行修改
在原來的基礎(chǔ)上添加:
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
這個時候我們訪問下服務(wù)器ip:5050就能看到一個可視化的數(shù)據(jù)庫管理頁面
記得在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-創(chuàng)建-服務(wù)器
輸入對應(yīng)的ip賬號密碼,就可以看到自己的數(shù)據(jù)庫了。
3、安裝pgagent插件(重點)
你需要進入postgres容器、環(huán)境配置、安裝pgagent、pgagent配置
docker-compose exec pgsql bash # 進入容器 apt-get update # 更新源 apt install vim # 安裝vim工具 vim /etc/apt/sources.list # 進入系統(tǒng)源配置文件把原來的注釋了添加 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 # 修改成國內(nèi)源 apt-get update apt install pgagent # 安裝pgagent psql -U postgres -h localhost # 創(chuàng)建db擴展 CREATE EXTENSION pgagent; \q exit # 在postgres數(shù)據(jù)庫上啟用pgagent: pgagent hostaddr=127.0.0.1 dbname=postgres user=postgres password=***** # 和你的docker-conpose保持一致就好
如果輸入pgagent hostaddr...指令沒有報錯的話就安裝插件完畢了。
這個時候你再去訪問pgadmin就可以看到
即pgagent配置完畢!
4、定時任務(wù)的開啟和清理的sql語句
鼠標右擊pgAgent任務(wù)-創(chuàng)建-pgAgent作業(yè)...
輸入名稱后,點擊步驟
由于我是本地所以連接字符串不需要(按照你的需求來) 在代碼中添加
SELECT delete_old_data();
這個清理的具體邏輯按照你實際情況來
這樣就是一天執(zhí)行一次,按照你的需求來,如果是小時為00分鐘為30,那就是到30分鐘就清理一次(一小時)
點擊保存就好了。
這里可以看到配置的狀態(tài)
尾聲
我就是簡單配置下,看看會不會生效。如果可以的話,我將把定時備份數(shù)據(jù)庫的操作也放到上面去。如果我上的有錯,也會修改。
以上就是PostgreSQL定時清理舊數(shù)據(jù)的實現(xiàn)方法的詳細內(nèi)容,更多關(guān)于PostgreSQL定時清理舊數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PostgreSQL中查看當(dāng)前時間和日期的幾種常用方法
在 PostgreSQL 中,有多個函數(shù)可以用來查看當(dāng)前時間和日期,這些函數(shù)在處理時間戳、日期和時間的計算時非常有用,以下是幾種常用的查看當(dāng)前時間和日期的函數(shù)及示例,需要的朋友可以參考下2024-10-10postgreSQL查詢結(jié)果添加一個額外的自增序列操作
這篇文章主要介紹了postgreSQL查詢結(jié)果添加一個額外的自增序列操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02解決PostgreSQL服務(wù)啟動后占用100% CPU卡死的問題
前文書說到,今天耗費了九牛二虎之力,終于馴服了NTFS權(quán)限安裝好了PostgreSQL,卻不曾想,服務(wù)啟動后,新的狀況又出現(xiàn)了。2009-08-08SQL Server數(shù)據(jù)遷移至PostgreSQL出錯的解釋以及解決方案
最近對SQL Server到PostgreSQL的數(shù)據(jù)遷移時出現(xiàn)了問題,返回的錯誤為:invalid byte sequence for encoding "UTF8": 0x00。經(jīng)查證pg源代碼,該問題引起的原因是sql server的字符類型字段中含有空字符\0,該字符在pg中不支持。2014-09-09PostgreSQL使用MySQL作為外部表(mysql_fdw)
PostgreSQL 提供了一種訪問和操作外部數(shù)據(jù)源的機制,稱為外部數(shù)據(jù)包裝器,本文主要給大家介紹了PostgreSQL使用MySQL作為外部表的方法,感興趣的朋友跟隨小編一起看看吧2022-11-11postgresql 刪除重復(fù)數(shù)據(jù)案例詳解
這篇文章主要介紹了postgresql 刪除重復(fù)數(shù)據(jù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念
時序數(shù)據(jù)是指按照時間順序存儲的數(shù)據(jù),TimescaleDB是一個開源的、擴展了PostgreSQL的時序數(shù)據(jù)庫擴展,本文就給大家詳細的介紹一下基于PostgreSQL的時序數(shù)據(jù)庫TimescaleDB的基本用法和概念,需要的朋友可以參考下2023-06-06