PG_CRON拡張機能は、PostgreSQL 9.5以降の単純なCRONベースのジョブスケジューラであり、データベースの拡張機能として実行されます。 PG_CRON拡張は、通常のCRON式と同じ構文を使用します。 ただし、データベースからPostgreSQLコマンドをスケジュールすることができます。
注意事項
- 以前のバージョンのPG_CRON拡張機能は、メモリリークのリスクがあります。 したがって、PG_CRON拡張を使用する前に、カーネルをV1.1.19以降にアップグレードしてください。 PG_CRON拡張を回避した場合、このリスクは発生しません。
- セキュリティ上の理由から、スケジュールされたタスクはシステム関数を使用してのみ実行できます。 システムでは、スケジュールされたタスクを追加および削除できます。 一般ユーザーは、
cron.job
テーブルのスケジュール済みタスクのみを表示できます。 関数の使用方法を選択します。 - スケジュールされたタスクは既定のPostgreSQLデータベースに格納されますが、他のデータベースでスケジュールされたタスクを照会できます。
- スケジュールされたタスクはGMTに基づいて実行されます。
- PG_CRON拡張機能はデフォルトで無効になっています。 セキュリティ上の理由から、手動で拡張機能を作成することはできません。 この機能を使用するには、クォータセンターに移動します。 polardb_pg_pg_cronに対応する [操作] 列で [適用] をクリックします。
PG_CRONエクステンションを無効にする
次のステートメントを実行すると、PG_CRON拡張機能を無効にできます。
-- PG_CRONを無効にする
ドロップ延長pg_cron;
PG_CRON拡張子を使用する
スケジュールされた各タスクは、スケジュールとタスクで構成されます。 スケジュールは、タスクが実行される時間を指定する。 例えば、タスクは毎分1回実行される。 タスクは、select * from some_table
などの操作を指定します。 PG_CRON拡張機能は、database
パラメーターを提供します。 このパラメーターはオプションです。 このパラメーターを指定しない場合、システムは自動的にPostgreSQL
データベースを使用します。
実行できるのは次の関数だけです。 他の関数の実行が無効です。
-- タスクを実行します。
SELECT cron.schedule('schedule', 'task')
-- タスクを実行するデータベースを選択します。
-3番目のパラメーターを指定しない場合は、構成ファイルのデータベースが使用されます。 デフォルトでは、PostgreSQLデータベースが使用されます。
SELECT cron.schedule('schedule' 、'task' 、'my_db')
-- タスクを削除します。
SELECT cron.unschedule(schedule_id)
-- タスクリストを表示します。
SELECT * からcron.job;
例
- スケジュール済みタスクを追加します。
-毎週土曜日の午前3時30分に古いデータを削除します。 時間はグリニッジ標準時 (GMT) です。 SELECT cron.schedule('30 3 * * 6 '、$$DELETE WHERE event_time < now() - interval '1 week'$$$); スケジュール ---------- 42 -毎日午前10時にディスクをクリアします。 時間はGMTです。 SELECT cron.schedule('0 10 * * * ', 'VACUUM'); スケジュール ---------- 43 -- 指定されたスクリプトを1分ごとに実行します。 SELECT cron.schedule('* * * *', 'select 1;'); スケジュール ---------- 44 -- 指定されたスクリプトを1時間の23分に実行します。 SELECT cron.schedule('23 * * * * ', 'select 1;'); スケジュール ---------- 45 -毎月4日目に指定したスクリプトを実行します。 SELECT cron.schedule('* * 4 * *', 'select 1;'); スケジュール ---------- 46
スケジュールは標準のCRON式を使用します。 式では、ワイルドカード
*
はタスクが定期的に実行されることを示し、数字はタスクが実行される特定の時点を示します。「 ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 分 (0〜59) │ ┌────────────── 时间 (0 ~ 23) │ │ ┌─────────────── 日付 (1 ~ 31) │ │ │ Month月 (1 ~ 12) 曜日 (0 ~ 6) (値0は日曜日を示します。 値7はまだ週末の日を示しています。 * * * * *
- タスクを削除します。
-- タスクを停止して削除します。 SELECT cron.unschedule(42); スケジュール解除 ------------ t
- 実行中のタスクを表示します。
SELECT * からcron.job; jobid | スケジュール | コマンド | nodename | nodeport | database | username | active ------ ----------- ----------------------------------------------------------------------------- 43 | 0 10 * * * | VACUUM; | localhost | 5433 | postgres | test | t