Timescale 云:性能、规模、企业级

自托管产品

MST

Timescale 中的作业是自定义函数或过程,按照您定义的时间表运行。本页解释如何创建、测试、修改和删除作业。

要遵循本页的步骤,您需要

要创建作业,请创建您希望服务执行的函数过程,然后将其设置为按计划运行。

  1. 用您选择的语言定义函数或过程

    将其包装在 CREATE 语句中

    CREATE FUNCTION <function_name> (job_id INT DEFAULT NULL, config JSONB DEFAULT NULL)
    RETURNS VOID
    DECLARE
    <declaration>;
    BEGIN
    <function_body>;
    END;
    $<variable_name>$ LANGUAGE <language>;

    例如,要创建一个在服务中重新索引表的函数

    CREATE FUNCTION reindex_mytable(job_id INT DEFAULT NULL, config JSONB DEFAULT NULL)
    RETURNS VOID
    AS $$
    BEGIN
    REINDEX TABLE mytable;
    END;
    $$ LANGUAGE plpgsql;

    job_idconfig 是函数签名中必需的参数。这会返回 CREATE FUNCTION 以指示函数已成功创建。

  2. 调用函数进行验证

    例如

    select reindex_mytable();

    结果如下

    reindex_mytable
    -----------------
    (1 row)
  3. 使用add_job 注册您的作业

    传入作业的名称、您希望它运行的时间表以及配置的内容。对于 config 值,如果您不需要任何特殊配置参数,请设置为 NULL。例如,要每小时运行 reindex_mytable 函数

    SELECT add_job('reindex_mytable', '1h', config => NULL);

    该调用返回一个 job_id 并将其与 config 一起存储在 Timescale 目录中。

    作业按照您设置的时间表运行。您也可以通过传入 job_id 使用run_job 手动运行它。当作业运行时,job_idconfig 将作为参数传入。

  4. 验证作业

    使用timescaledb_information.jobs 列出所有当前注册的作业

    SELECT * FROM timescaledb_information.jobs;

    结果如下

    job_id | application_name | schedule_interval | max_runtime | max_retries | retry_period | proc_schema | proc_name | owner | scheduled | config | next_start | hypertable_schema | hypertable_name
    --------+----------------------------+-------------------+-------------+-------------+--------------+-----------------------+------------------+-----------+-----------+------------------------+-------------------------------+-------------------+-----------------
    1 | Telemetry Reporter [1] | 24:00:00 | 00:01:40 | -1 | 01:00:00 | _timescaledb_internal | policy_telemetry | postgres | t | | 2022-08-18 06:26:39.524065+00 | |
    1000 | User-Defined Action [1000] | 01:00:00 | 00:00:00 | -1 | 00:05:00 | public | reindex_mytable | tsdbadmin | t | | 2022-08-17 07:17:24.831698+00 | |
    (2 rows)

要调试作业,请提高日志级别并在前台使用run_job 手动运行作业。由于 run_job 是一个存储过程而不是函数,因此请使用CALL而不是 SELECT 来运行它。

  1. 将最低日志级别设置为 DEBUG1

    SET client_min_messages TO DEBUG1;
  2. 运行作业

    1000 替换为您的 job_id

    CALL run_job(1000);

使用alter_job 修改现有作业。您可以更改配置以及作业运行的时间表。

  1. 更改作业的配置

    要替换作业的整个 JSON 配置,请使用新的 config 对象调用 alter_job。例如,替换 ID 为 1000 的作业的 JSON 配置

    SELECT alter_job(1000, config => '{"hypertable":"metrics"}');
  2. 关闭作业调度

    要关闭作业的自动调度,请调用 alter_job 并将 scheduled 设置为 false。您仍然可以使用 run_job 手动运行作业。例如,关闭 ID 为 1000 的作业的调度

    SELECT alter_job(1000, scheduled => false);
  3. 重新启用作业的自动调度

    要重新启用作业的自动调度,请调用 alter_job 并将 scheduled 设置为 true。例如,重新启用 ID 为 1000 的作业的调度

    SELECT alter_job(1000, scheduled => true);
  4. 使用delete_job 删除作业

    例如,要删除 ID 为 1000 的作业

    SELECT delete_job(1000);

关键词

本页发现问题?报告问题 或 在 GitHub 上编辑此页面