PostgreSQL DBMS_JOB 相容性擴充套件

發布於 2021-08-25,作者:MigOps
相關開源

2021年8月25日

PostgreSQL DBMS_JOB 相容性擴充套件

pg_dbms_job 是一個新的 PostgreSQL 擴充套件,用於建立、管理和使用 Oracle 風格的 DBMS_JOB 排程任務。其使用方式和行為就像 Oracle 的 DBMS_JOB 套件一樣。

pg_dbms_job v1.0.1 已經發布,這是該擴充套件的第一個版本,相容於 PostgreSQL 9.1 到目前版本。

它允許從任務佇列管理排程任務或立即非同步執行任務。任務定義包含要執行的程式碼、下一次執行日期以及任務的執行頻率。任務可以運行 SQL 命令、plpgsql 程式碼或現有的儲存程序。

如果呼叫 submit 儲存程序時沒有 next_date(when)和 interval(how often)屬性,則任務會立即在非同步程序中執行。如果 interval 為 NULL 且 next_date 小於或等於目前時間戳記,則任務也會立即作為非同步程序執行。在所有其他情況下,任務將在適當的時間啟動,但如果 interval 為 NULL,則任務只會執行一次,然後將其刪除。

如果排程任務成功完成,則其新的執行日期將放置在 next_date 中。新的日期是透過評估定義為 interval 的 SQL 表達式來計算的。 interval 參數必須評估為未來的時間。

此擴充套件包含一個 SQL 指令碼,用於建立與其操作相關的所有物件,以及一個常駐程式,該常駐程式必須附加到定義任務的資料庫上運行。常駐程式負責執行佇列中的非同步任務和排程任務。它可以運行在定義任務的資料庫的同一主機上,也可以運行在任何其他主機上。排程時間取自資料庫主機,而不是運行常駐程式的主機。

預設情況下,可以同時執行的任務數量限制為 1000 個。如果達到此限制,常駐程式將等待一個程序結束後再運行一個新的程序。

使用外部排程常駐程式而不是背景工作程式是一個選擇,從背景工作程式 fork 出數千個子程序不是一個好主意。

任務執行是由排程器在提交或修改新任務時收到的 NOTIFY 事件觸發的。 每 0.1 秒輪詢一次通知。 如果沒有通知,排程器會每 job_queue_interval 秒(預設為 5 秒)輪詢儲存任務定義的表格。 這表示最糟的情況下,任務將在定義的下一次執行日期之後 job_queue_interval 秒執行。

請參閱 pg_dbms_job 文件 以取得更多資訊。

連結 & 鳴謝

pg_dbms_job 是在 PostgreSQL 許可下由 Gilles Darold 在 MigOps Inc 建立的開放專案,作為 Ora2Pg 改進的一部分。 歡迎您對建構更好的工具做出貢獻。 您可以使用 GitHub 工具發送您的想法、功能請求或補丁。

連結

關於 pg_dbms_job

pg_dbms_job 擴充套件是 MigOps Inc 的原創作品,MigOPs 專門從事遷移到 PostgreSQL 和 PostgreSQL 支援。 如果您需要更多資訊,請與我們聯絡

文件位於 https://github.com/MigOpsRepos/pg_dbms_job#readme