mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
Currently, the next start of a scheduled background job is calculated by adding the `schedule_interval` to its finish time. This does not allow scheduling jobs to execute at fixed times, as the next execution is "shifted" by the job duration. This commit introduces the option to execute a job on a fixed schedule instead. Users are expected to provide an initial_start parameter on which subsequent job executions are aligned. The next start is calculated by computing the next time_bucket of the finish time with initial_start origin. An `initial_start` parameter is added to the compression, retention, reorder and continuous aggregate `add_policy` signatures. By passing that upon policy creation users indicate the policy will execute on a fixed schedule, or drifting schedule if `initial_start` is not provided. To allow users to pick a drifting schedule when registering a UDA, an additional parameter `fixed_schedule` is added to `add_job` to allow users to specify the old behavior by setting it to false. Additionally, an optional TEXT parameter, `timezone`, is added to both add_job and add_policy signatures, to address the 1-hour shift in execution time caused by DST switches. As internally the next start of a fixed schedule job is calculated using time_bucket, the timezone parameter allows using timezone-aware buckets to calculate the next start.
131 lines
4.5 KiB
SQL
131 lines
4.5 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
-- Add a retention policy to a hypertable or continuous aggregate.
|
|
-- The retention_window (typically an INTERVAL) determines the
|
|
-- window beyond which data is dropped at the time
|
|
-- of execution of the policy (e.g., '1 week'). Note that the retention
|
|
-- window will always align with chunk boundaries, thus the window
|
|
-- might be larger than the given one, but never smaller. In other
|
|
-- words, some data beyond the retention window
|
|
-- might be kept, but data within the window will never be deleted.
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_retention_policy(
|
|
relation REGCLASS,
|
|
drop_after "any",
|
|
if_not_exists BOOL = false,
|
|
schedule_interval INTERVAL = NULL,
|
|
initial_start TIMESTAMPTZ = NULL,
|
|
timezone TEXT = NULL
|
|
)
|
|
RETURNS INTEGER AS '@MODULE_PATHNAME@', 'ts_policy_retention_add'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.remove_retention_policy(
|
|
relation REGCLASS,
|
|
if_exists BOOL = false
|
|
) RETURNS VOID
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_retention_remove'
|
|
LANGUAGE C VOLATILE STRICT;
|
|
|
|
/* reorder policy */
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_reorder_policy(
|
|
hypertable REGCLASS,
|
|
index_name NAME,
|
|
if_not_exists BOOL = false,
|
|
initial_start timestamptz = NULL,
|
|
timezone TEXT = NULL
|
|
) RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_reorder_add'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.remove_reorder_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS VOID
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_reorder_remove'
|
|
LANGUAGE C VOLATILE STRICT;
|
|
|
|
/* compression policy */
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_compression_policy(
|
|
hypertable REGCLASS, compress_after "any",
|
|
if_not_exists BOOL = false,
|
|
schedule_interval INTERVAL = NULL,
|
|
initial_start TIMESTAMPTZ = NULL,
|
|
timezone TEXT = NULL
|
|
)
|
|
RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_compression_add'
|
|
LANGUAGE C VOLATILE; -- not strict because we need to set different default values for schedule_interval
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.remove_compression_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_compression_remove'
|
|
LANGUAGE C VOLATILE STRICT;
|
|
|
|
/* continuous aggregates policy */
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_continuous_aggregate_policy(
|
|
continuous_aggregate REGCLASS, start_offset "any",
|
|
end_offset "any", schedule_interval INTERVAL,
|
|
if_not_exists BOOL = false,
|
|
initial_start TIMESTAMPTZ = NULL,
|
|
timezone TEXT = NULL
|
|
)
|
|
RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_refresh_cagg_add'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.remove_continuous_aggregate_policy(
|
|
continuous_aggregate REGCLASS,
|
|
if_not_exists BOOL = false, -- deprecating this argument, if_exists overrides it
|
|
if_exists BOOL = NULL) -- when NULL get the value from if_not_exists
|
|
|
|
RETURNS VOID
|
|
AS '@MODULE_PATHNAME@', 'ts_policy_refresh_cagg_remove'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
/* 1 step policies */
|
|
|
|
/* Add policies */
|
|
CREATE OR REPLACE FUNCTION timescaledb_experimental.add_policies(
|
|
relation REGCLASS,
|
|
if_not_exists BOOL = false,
|
|
refresh_start_offset "any" = NULL,
|
|
refresh_end_offset "any" = NULL,
|
|
compress_after "any" = NULL,
|
|
drop_after "any" = NULL)
|
|
RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_policies_add'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
/* Remove policies */
|
|
CREATE OR REPLACE FUNCTION timescaledb_experimental.remove_policies(
|
|
relation REGCLASS,
|
|
if_exists BOOL = false,
|
|
VARIADIC policy_names TEXT[] = NULL)
|
|
RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_policies_remove'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
/* Remove all policies */
|
|
CREATE OR REPLACE FUNCTION timescaledb_experimental.remove_all_policies(
|
|
relation REGCLASS,
|
|
if_exists BOOL = false)
|
|
RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_policies_remove_all'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
/* Alter policies */
|
|
CREATE OR REPLACE FUNCTION timescaledb_experimental.alter_policies(
|
|
relation REGCLASS,
|
|
if_exists BOOL = false,
|
|
refresh_start_offset "any" = NULL,
|
|
refresh_end_offset "any" = NULL,
|
|
compress_after "any" = NULL,
|
|
drop_after "any" = NULL)
|
|
RETURNS BOOL
|
|
AS '@MODULE_PATHNAME@', 'ts_policies_alter'
|
|
LANGUAGE C VOLATILE;
|
|
|
|
/* Show policies info */
|
|
CREATE OR REPLACE FUNCTION timescaledb_experimental.show_policies(
|
|
relation REGCLASS)
|
|
RETURNS SETOF JSONB
|
|
AS '@MODULE_PATHNAME@', 'ts_policies_show'
|
|
LANGUAGE C VOLATILE; |