PostgreSQL的擴展 pg_cron

PostgreSQL的擴展 pg_cron

pg_cron 是 PostgreSQL 的一個開源擴展,它允許在數據庫內部使用 cron 語法調度定期任務,是最接近 Oracle DBMS_SCHEDULER 的解決方案。

一 安裝與配置

1 安裝方法

下載路徑:

https://github.com/citusdata/pg_cron/tags

在這里插入圖片描述

編譯安裝:

cd pg_cron
make && make install

在 PostgreSQL 中配置:

-- 在 postgresql.conf 中添加:
shared_preload_libraries = 'pg_cron'-- 重啟后創建擴展
CREATE EXTENSION pg_cron;

2. 權限配置

-- 創建專用角色
CREATE ROLE cron_job_runner WITH LOGIN;
GRANT USAGE ON SCHEMA cron TO cron_job_runner;-- 配置任務執行權限
ALTER SYSTEM SET cron.database_name = 'your_database';
ALTER SYSTEM SET cron.host = 'localhost';
ALTER SYSTEM SET cron.log_run = 'on';

二、核心功能使用

1. 基本任務調度

-- 每分鐘執行
SELECT cron.schedule('test-job', '* * * * *', 'SELECT now()');-- 每天凌晨3點執行
SELECT cron.schedule('nightly-cleanup', '0 3 * * *', 'DELETE FROM logs WHERE created_at < now() - interval ''30 days''');-- 每周一早上執行
SELECT cron.schedule('weekly-report', '0 9 * * 1', 'CALL generate_weekly_report()');

2. 帶參數的任務

-- 使用美元引用
SELECT cron.schedule('param-job', '0 * * * *', $$UPDATE stats SET value = value + 1 WHERE metric_id = 'page_views'$$);-- 調用存儲過程
SELECT cron.schedule('call-proc', '0 0 * * *', 'CALL refresh_materialized_views(true)');

3. 任務管理

-- 查看所有任務
SELECT * FROM cron.job;-- 查看執行歷史
SELECT * FROM cron.job_run_details ORDER BY start_time DESC LIMIT 10;-- 更新任務計劃
SELECT cron.alter_job(job_id, schedule := '0 4 * * *');-- 刪除任務
SELECT cron.unschedule(jobid);

三、高級功能

1. 任務重試機制

-- 帶錯誤處理的任務
SELECT cron.schedule('retry-job', '*/5 * * * *', $$
BEGIN-- 業務邏輯INSERT INTO important_data SELECT * FROM external_source;
EXCEPTION WHEN OTHERS THENINSERT INTO job_errors VALUES ('retry-job', SQLERRM, now());
END;
$$);

2. 任務依賴鏈

-- 使用表狀態控制流程
SELECT cron.schedule('step1', '0 1 * * *', $$TRUNCATE TABLE staging_data;COPY staging_data FROM '/data/import.csv';UPDATE job_status SET step1_complete = true WHERE job_name = 'daily_import';
$$);SELECT cron.schedule('step2', '0 2 * * *', $$BEGINPERFORM 1 FROM job_status WHERE job_name = 'daily_import' AND step1_complete;IF NOT FOUND THENRAISE EXCEPTION 'Step1 not completed';END IF;-- 處理數據...END;
$$);

3. 分布式任務

-- 在多個節點上調度(需Citus擴展)
SELECT cron.schedule('sharded-job', '0 * * * *', 'SELECT master_distribute_command($cmd$INSERT INTO sharded_events SELECT * FROM collect_events()$cmd$)');

四、監控與維護

1. 監控面板查詢

-- 正在運行的任務
SELECT * FROM cron.job_run_details 
WHERE status = 'running';-- 失敗任務統計
SELECT jobid, jobname, COUNT(*) as failures
FROM cron.job_run_details
WHERE status = 'failed'
GROUP BY jobid, jobname
ORDER BY failures DESC;-- 任務執行時長分析
SELECT jobname,avg(end_time - start_time) as avg_duration,max(end_time - start_time) as max_duration
FROM cron.job_run_details
GROUP BY jobname;

2. 維護操作

-- 清理歷史記錄(保留30天)
DELETE FROM cron.job_run_details 
WHERE start_time < now() - interval '30 days';-- 臨時禁用所有任務
UPDATE cron.job SET active = false;-- 導出任務配置
COPY (SELECT jobname, schedule, command FROM cron.job) 
TO '/backup/pg_cron_jobs.csv' WITH CSV HEADER;

五、典型應用場景

1. 數據維護任務

-- 自動VACUUM
SELECT cron.schedule('auto-vacuum', '0 4 * * *', $$VACUUM (VERBOSE, ANALYZE) tables_with_heavy_updates;
$$);-- 分區表維護
SELECT cron.schedule('partition-rotation', '0 3 * * *', $$CALL rotate_partitions('events', 'day', 7);
$$);

2. 數據ETL流程

-- 每小時數據抽取
SELECT cron.schedule('extract-hourly', '0 * * * *', $$INSERT INTO data_warehouse.hourly_factsSELECT * FROM extract_hourly_metrics();
$$);-- 每天數據轉換
SELECT cron.schedule('transform-daily', '30 3 * * *', $$CALL transform_raw_to_dimensions();
$$);

3. 業務定時任務

-- 每月賬單生成
SELECT cron.schedule('monthly-billing', '0 2 1 * *', $$CALL generate_invoices(date_trunc('month', CURRENT_DATE));
$$);-- 定時提醒
SELECT cron.schedule('appointment-reminders', '0 9 * * *', $$INSERT INTO notificationsSELECT user_id, 'appointment_reminder', appointment_timeFROM appointmentsWHERE appointment_time BETWEEN now() AND now() + interval '24 hours';
$$);

六、注意事項

  1. 性能影響

    • 避免調度過于頻繁的CPU密集型任務
    • 長時間運行的任務應設置超時
  2. 安全考慮

    -- 限制任務權限
    REVOKE ALL ON SCHEMA cron FROM PUBLIC;
    GRANT USAGE ON SCHEMA cron TO scheduler_role;
    
  3. 高可用性

    • 在主備架構中,pg_cron只需在主節點運行
    • 使用 repmgr 或 Patroni 時確保故障轉移后任務繼續執行
  4. 版本兼容性

    • pg_cron 1.0+ 需要 PostgreSQL 12+
    • 新版本支持任務標簽和更細粒度的控制

pg_cron 通過將 cron 功能直接集成到 PostgreSQL 中,提供了輕量級但強大的任務調度解決方案,特別適合需要與數據庫緊密交互的定時任務場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78468.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

卷積神經網絡遷移學習:原理與實踐指南

引言 在深度學習領域&#xff0c;卷積神經網絡(CNN)已經在計算機視覺任務中取得了巨大成功。然而&#xff0c;從頭開始訓練一個高性能的CNN模型需要大量標注數據和計算資源。遷移學習(Transfer Learning)技術為我們提供了一種高效解決方案&#xff0c;它能夠將預訓練模型的知識…

圖論---樸素Prim(稠密圖)

O( n ^2 ) 題目通常會提示數據范圍&#xff1a; 若 V ≤ 500&#xff0c;兩種方法均可&#xff08;樸素Prim更穩&#xff09;。 若 V ≤ 1e5&#xff0c;必須用優先隊列Prim vector 存圖。 // 最小生成樹 —樸素Prim #include<cstring> #include<iostream> #i…

Spring-Cache替換Keys為Scan—負優化?

背景 使用ORM工具是往往會配合緩存框架實現三級緩存提高查詢效率&#xff0c;spring-cache配合redis是非常常規的實現方案&#xff0c;如未做特殊配置&#xff0c;CacheEvict(allEntries true) 的批量驅逐方式&#xff0c;默認使用keys的方式查詢歷史緩存列表而后delete&…

【N8N】Docker Desktop + WSL 安裝過程(Docker Desktop - WSL update Failed解決方法)

背景說明&#xff1a; 因為要用n8n&#xff0c;官網推薦這個就下載了&#xff0c;然后又是一堆卡的安裝問題記錄過程。 1. 下載安裝包 直接去官網Get Docker | Docker Docs下載 下載的是第一個windows - x86_64. &#xff08;*下面那個beta的感覺是測試版&#xff09; PS&am…

RT Thread 發生異常時打印輸出cpu寄存器信息和棧數據

打印輸出發生hardfault時,當前棧十六進制數據和cpu寄存器信息 在發生 HardFault 時,打印當前棧的十六進制數據和 CPU 寄存器信息是非常重要的調試手段。以下是如何實現這一功能的具體步驟和示例代碼。 1. 實現 HardFault 處理函數 我們需要在 HardFault 中捕獲異常上下文,…

【安裝neo4j-5.26.5社區版 完整過程】

1. 安裝java 下載 JDK21-windows官網地址 配置環境變量 在底下的系統變量中新建系統變量&#xff0c;變量名為JAVA_HOME21&#xff0c;變量值為JDK文件夾路徑&#xff0c;默認為&#xff1a; C:\Program Files\Java\jdk-21然后在用戶變量的Path中&#xff0c;添加下面兩個&am…

android jatpack Compose 多數據源依賴處理:從狀態管理到精準更新的架構設計

Android Compose 多接口數據依賴管理&#xff1a;ViewModel 狀態共享最佳實踐 &#x1f4cc; 問題背景 在 Jetpack Compose 開發中&#xff0c;經常遇到以下場景&#xff1a; 頁面由多個獨立接口數據組成&#xff08;如 Part1、Part2&#xff09;Part2 的某些 UI 需要依賴 P…

面試之消息隊列

消息隊列場景 什么是消息隊列&#xff1f; 消息隊列是一個使用隊列來通信的組件&#xff0c;它的本質就是個轉發器&#xff0c;包含發消息、存消息、消費消息。 消息隊列怎么選型&#xff1f; 特性ActiveMQRabbitMQRocketMQKafka單機吞吐量萬級萬級10萬級10萬級時效性毫秒級…

GStreamer 簡明教程(十一):插件開發,以一個音頻生成(Audio Source)插件為例

系列文章目錄 GStreamer 簡明教程&#xff08;一&#xff09;&#xff1a;環境搭建&#xff0c;運行 Basic Tutorial 1 Hello world! GStreamer 簡明教程&#xff08;二&#xff09;&#xff1a;基本概念介紹&#xff0c;Element 和 Pipeline GStreamer 簡明教程&#xff08;三…

Linux kernel signal原理(下)- aarch64架構sigreturn流程

一、前言 在上篇中寫到了linux中signal的處理流程&#xff0c;在do_signal信號處理的流程最后&#xff0c;會通過sigreturn再次回到線程現場&#xff0c;上篇文章中介紹了在X86_64架構下的實現&#xff0c;本篇中介紹下在aarch64架構下的實現原理。 二、sigaction系統調用 #i…

華為OD機試真題——簡易內存池(2025A卷:200分)Java/python/JavaScript/C++/C/GO最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析&#xff1b; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式&#xff01; 本文收錄于專欄&#xff1a;《2025華為OD真題目錄全流程解析/備考攻略/經驗…

騰訊一面面經:總結一下

1. Java 中的 和 equals 有什么區別&#xff1f;比較對象時使用哪一個 1. 操作符&#xff1a; 用于比較對象的內存地址&#xff08;引用是否相同&#xff09;。 對于基本數據類型、 比較的是值。&#xff08;8種基本數據類型&#xff09;對于引用數據類型、 比較的是兩個引…

計算機網絡中的DHCP是什么呀? 詳情解答

目錄 DHCP 是什么&#xff1f; DHCP 的工作原理 主要功能 DHCP 與網絡安全的關系 1. 正面作用 2. 潛在安全風險 DHCP 的已知漏洞 1. 協議設計缺陷 2. 軟件實現漏洞 3. 配置錯誤導致的漏洞 4. 已知漏洞總結 舉例說明 DHCP 與網絡安全 如何提升 DHCP 安全性 總結 D…

2025 年導游證報考條件新政策解讀與應對策略

2025 年導游證報考政策有了不少新變化&#xff0c;這些變化會對報考者產生哪些影響&#xff1f;我們又該如何應對&#xff1f;下面就為大家詳細解讀新政策&#xff0c;并提供實用的應對策略。 最引人注目的變化當屬中職旅游類專業學生的報考政策。以往&#xff0c;中專學歷報考…

【物聯網】基于LORA組網的遠程環境監測系統設計(ThingsCloud云平臺版)

演示視頻: 基于LORA組網的遠程環境監測系統設計(ThingsCloud云平臺版) 前言:本設計是基于ThingsCloud云平臺版,還有另外一個版本是基于機智云平臺版本,兩個設計只是云平臺和手機APP的區別,其他功能都一樣。如下鏈接: 【物聯網】基于LORA組網的遠程環境監測系統設計(機…

SQL 函數進行左邊自動補位fnPadLeft和FORMAT

目錄 1.問題 2.解決 方式1 方式2 3.結果 1.問題 例如在SQL存儲過程中&#xff0c;將1 或10 或 100 長度不足的時候&#xff0c;自動補足長度。 例如 1 → 001 10→ 010 100→100 2.解決 方式1 SELECT FORMAT (1, 000) AS FormattedNum; SELECT FORMAT(12, 000) AS Form…

Nacos簡介—2.Nacos的原理簡介

大綱 1.Nacos集群模式的數據寫入存儲與讀取問題 2.基于Distro協議在啟動后的運行規則 3.基于Distro協議在處理服務實例注冊時的寫路由 4.由于寫路由造成的數據分片以及隨機讀問題 5.寫路由 數據分區 讀路由的CP方案分析 6.基于Distro協議的定時同步機制 7.基于Distro協…

中電金信聯合阿里云推出智能陪練Agent

在金融業加速數智化轉型的今天&#xff0c;提升服務效率與改善用戶體驗已成為行業升級的核心方向。面對這一趨勢&#xff0c;智能體與智能陪練的結合應用&#xff0c;正幫助金融機構突破傳統業務模式&#xff0c;開拓更具競爭力的創新機遇。 在近日召開的阿里云AI勢能大會期間&…

十分鐘恢復服務器攻擊——群聯AI云防護系統實戰

場景描述 服務器遭遇大規模DDoS攻擊&#xff0c;導致服務不可用。通過群聯AI云防護系統的分布式節點和智能調度功能&#xff0c;快速切換流量至安全節點&#xff0c;清洗惡意流量&#xff0c;10分鐘內恢復業務。 技術實現步驟 1. 啟用智能調度API觸發節點切換 群聯系統提供RE…

LLM量化技術全景:GPTQ、QAT、AWQ、GGUF與GGML

01 引言 本文介紹的是在 LLM 討論中經常聽到的各種量化技術。本文的目的是提供一步一步的解釋和代碼&#xff0c;讓大家可以自己使用這些技術來壓縮模型。 閑話少說&#xff0c;我們來研究一下吧&#xff01; 02 Quantization 量化是指將高精度數字轉換為低精度數字。低精…