すべてのプロダクト
Search
ドキュメントセンター

PolarDB:PG_CRON

最終更新日:Jun 05, 2024

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