postgres 安裝與使用定時任務插件 pg_cron
pg_cron
是 PostgreSQL
(9.5 或更高版本)的一個簡單的基於cron
的作業調度程序,它作爲擴展在數據庫中運行,由citusdata
公司提供,由於postgresql
本身沒有類似 oracle schedule
、job
的功能,所以在處理調度問題時,運行 job 基本依賴操作系統的crontab
。 它與常規 cron 保持相同的語法,但它允許直接從數據庫安排 PostgreSQL 命令。作爲一個獨立運行的工作者進程,其生命週期管理、內存空間都依賴於 postgreSQL。
1.pg_cron 生命週期
pg_cron
插件的主體是圍繞 PG_CRON_TASK
進行,從內部來說, PG_CRON_TASK
有自己的生命週期,其生命週期的輪轉過程就是插件的運行過程,從外部來說 PG_CRON_TASK
與 PG_CRON_JOB
通信取得當前的任務列表,在運行狀態與 POSTMASTER
通信 完成定時任務的運行。
pg_cron
生命週期中涉及到的主要涉及環境信息 如 圖 2 所示,主要分爲三類:即狀態檢查信息、標誌位返回信息 和 錯誤返回信息 。而pg_cron
的生命週期的狀態轉移就由這些信息控制。狀態轉移狀態一般來說也分爲三類:狀態等待中,正常執行進入下一個狀態,錯誤信息返回。進程從 CRON_TASK_WAITING
開始,依次進入每一個對應的狀態,最後流轉到 CRON_TASK_DONE
和 CRON_TASK_ERROR
中的一個。 最後這些狀態信息被重置,pg_cron
進入下一個生命週期。
2. 安裝
2.1 環境
操作系統:centos7
postgresql 版本:12
2.2 擴展安裝
yum install -y pg_cron_12
2.3 postgresql.conf 配置
shared_preload_libraries = 'pg_cron'
cron.database_name = '數據庫名稱'
2.4 配置連接
通常的 pg_hba.conf 文件配置包含以下內容即可:
host all all localhost trust
host all all 0.0.0.0/0 trust
host all all 127.0.0.1/32 trust
2.5 創建並激活插件
-- run as superuser:
CREATE EXTENSION pg_cron;
-- optionally, grant usage to regular users: marco
GRANT USAGE ON SCHEMA cron TO marco;
3. 使用
3.1 創建定時任務
每一個定時任務分爲兩部分: 定時計劃 和 定時任務。定時計劃規定了用戶 使用 插件的計劃(例如:每隔 1 分鐘執行一次該任務),定時任務是用戶具體的任務內容(例如:select * from some_table
) 普通用戶一共有三個可選函數:增加任務項、刪除任務項、查看當前任務項。
- 增加任務項
--每分鐘執行指定腳本
SELECT cron.schedule('* * * * *','select 1;');
--每個小時的23分執行指定腳本
SELECT cron.schedule('23 * * * *','select 1;')
--每個月的4號執行指定腳本
SELECT cron.schedule('* * 4 * *','select 1;');
pg_cron
計劃使用標準的 cron
語法,其中 * 表示 “每個該時間運行”,特定數字表示 “僅在 這個數字時 運行”
┌─────────────分鐘(0-59)
│┌──────────────小時(0-23)
││┌───────────────日期(1-31)
│││┌────────────────月份(1-12)
││││┌─────────────────一週中的某一天(0-6)(0到6表示週末到下週六,
│││││7仍然是週末)
││││││││││*****
- 刪除任務項
-- 取消單個任務
SELECT cron.unschedule(<定時任務ID>);
--一次取消所有定時任務
SELECT cron.unschedule(jobid) FROM cron.job;
- 查看當前任務
SELECT * FROM cron.job;
jobid | schedule | command | nodename | nodeport | database | username | active
-------+------------+-----------+-----------+----------+----------+----------+--------
43|010***| VACUUM;| localhost |5433| postgres | test | t
3.2 審覈日誌
審覈日誌可讓我們查看正在運行的 cron 作業以及過去的作業運行,cron 這個 schema 下有個 job_run_details 表,這個表其實就是查看我們命令執行的一些細節。
1)命令開始和結束的時間
2)pg_cron命令是否成功
3)返回的行數-或錯誤消息
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://juejin.cn/post/7024130134365978655