日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

通过pgAgent实现PostgreSQL上的自动作业

發布時間:2024/4/14 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过pgAgent实现PostgreSQL上的自动作业 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用數據庫時,我們經常會需要在上面跑一些定時作業,例如轉歷史庫,批處理,定時維護數據等。Oracle可以通過其自帶的job機制來進行,作為Oracle的替代方案之一的PostgreSQL沒有自帶job機制,但是可以通過pgAgent來補全功能。

在pgAdmin v1.9版本之前,pgAgent是其安裝包的一部分,pgAdmin v1.9之后 pgAgent獨立成一個單獨的軟件包。

1. 環境

操作系統 RHEL 6.3

數據庫版本 PostgreSQL 10.3

2. 軟件下載獲取

在PG自己的yum源上可以下載到適配各個數據庫版本的pgAgent及其依賴包。可以選擇配置yum源安裝或者在沒有網絡的內網環境下通過下載安裝。如果下載安裝則要補全依賴包。我這里是內網RHEL 6.3 軟件工作站模式。需要下載:

wxBase-2.8.12-1.el6.x86_64.rpm pgagent_10-3.4.0-10.rhel6.x86_64.rpm

3. 部署pgAgent

# rpm -ivh wxBase-2.8.12-1.el6.x86_64.rpm warning: wxBase-2.8.12-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY Preparing... ########################################### [100%]1:wxBase ########################################### [100%]# rpm -ivh pgagent_10-3.4.0-10.rhel6.x86_64.rpm warning: pgagent_10-3.4.0-10.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY Preparing... ########################################### [100%]1:pgagent_10 ########################################### [100%]

默認pgAgent會被安裝在/usr/share/pgagent_10 目錄下,可執行文件位于/usr/bin/pgagent_10

軟件包安裝完成后在需要進行作業調度的數據庫執行以下腳本完成作業調度相關數據庫對象的創建工作(并非全局有效)

$ psql -U postgres -d postgres -f /usr/share/pgagent_10-3.4.0/pgagent.sql

腳本執行完后會在數據庫內生成一個新的catalog,通過這個schema進行數據庫作業的調度。

最后還需要啟動pgAgent才算是全部完成。

$ pgagent_10 -s /PostgreSQL/10/data/pgagent.log hostaddr=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456

4.作業部署

完成pgAgent的安裝部署工作后,在pgAdmin上出現相應的菜單

通過pgAgent可以使用圖形化頁面維護作業,不知道填什么的時候注意看提示基本就知道了。

  • 定義作業名稱

  • 定義作業步驟

在General頁定義通用信息

?

在code頁定義需要執行的代碼

?

  • 定義調度信息

在general頁定義基本信息

?

在Repeat頁定義周期,周期使用cron風格。

?

以上所有操作也可以通過SQL進行,上面所有操作對應的代碼如下:

DO $$ DECLAREjid integer;scid integer; BEGIN -- Creating a new job INSERT INTO pgagent.pga_job(jobjclid, jobname, jobdesc, jobhostagent, jobenabled ) VALUES (1::integer, 'job_test2'::text, ''::text, ''::text, true ) RETURNING jobid INTO jid;-- Steps -- Inserting a step (jobid: NULL) INSERT INTO pgagent.pga_jobstep (jstjobid, jstname, jstenabled, jstkind,jstconnstr, jstdbname, jstonerror,jstcode, jstdesc ) VALUES (jid, 'step1'::text, true, 's'::character(1),''::text, 'postgres'::name, 'f'::character(1),'insert into t1 values (999);'::text, ''::text ) ;-- Schedules -- Inserting a schedule INSERT INTO pgagent.pga_schedule(jscjobid, jscname, jscdesc, jscenabled,jscstart, jscend, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths ) VALUES (jid, 'job_sch_test2'::text, ''::text, true,'2018-05-24 15:12:33+08'::timestamp with time zone, '2018-05-25 15:12:39+08'::timestamp with time zone,-- MinutesARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true]::boolean[],-- HoursARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false]::boolean[],-- Week daysARRAY[false, false, false, false, false, false, false]::boolean[],-- Month daysARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]::boolean[],-- MonthsARRAY[false, false, false, false, false, false, false, false, false, false, false, false]::boolean[] ) RETURNING jscid INTO scid; END $$;

再回到圖形界面,除了預先定義好的作業外,通過作業上的run now選項可以立刻執行一次。

上面的設置里我選擇在每天的15點56-59分,一共執行4次作業,每次向t1表寫入一條數據。完成后

?

5. pgAgent的數據字典表

pgAgent的相關表都位于Catalogs/pgAgent下。

pga_exception : 記錄作業執行異常信息

pga_job: 作業定義的基本信息,作業起止時間,最后運行時間等

pga_jobagent:pgAgent的配置信息,服務器上pgAgent的地址和啟動時間

pga_jobclass: pgAgent的配置信息,定義作業類型

pga_joblog:每個作業的運行日志,包含啟動時間、執行時長。

pga_jobstep:每個job步驟的定義在這個表里。

pga_jobsteplog:每個job步驟的執行日志,包含步驟的開始時間,執行時長。

pga_schedule:job調度的定義在這個表里。

?

轉載于:https://www.cnblogs.com/aegis1019/p/9085133.html

總結

以上是生活随笔為你收集整理的通过pgAgent实现PostgreSQL上的自动作业的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。