-- 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. -- A retention policy is set up for the table _timescaledb_internal.job_errors (Error Log Retention Policy [2]) -- By default, it will run once a month and and drop rows older than a month. CREATE OR REPLACE FUNCTION _timescaledb_functions.policy_job_stat_history_retention(job_id integer, config JSONB) RETURNS integer LANGUAGE PLPGSQL AS $BODY$ DECLARE drop_after INTERVAL; numrows INTEGER; BEGIN drop_after := config->>'drop_after'; DELETE FROM _timescaledb_internal.bgw_job_stat_history WHERE execution_finish < (now() - drop_after); GET DIAGNOSTICS numrows = ROW_COUNT; RETURN numrows; END; $BODY$ SET search_path TO pg_catalog, pg_temp; CREATE OR REPLACE FUNCTION _timescaledb_functions.policy_job_stat_history_retention_check(config JSONB) RETURNS VOID LANGUAGE PLPGSQL AS $BODY$ BEGIN IF config IS NULL THEN RAISE EXCEPTION 'config cannot be NULL, and must contain drop_after'; END IF; IF config->>'drop_after' IS NULL THEN RAISE EXCEPTION 'drop_after interval not provided'; END IF ; END; $BODY$ SET search_path TO pg_catalog, pg_temp; -- this is the previous job that was created for the same purpose -- which has scheduled set to false. We need to keep it around to -- not break loading dumps from older versions. INSERT INTO _timescaledb_config.bgw_job ( id, application_name, schedule_interval, max_runtime, max_retries, retry_period, proc_schema, proc_name, owner, scheduled, config, check_schema, check_name, fixed_schedule, initial_start ) VALUES ( 2, 'Error Log Retention Policy [2]', INTERVAL '1 month', INTERVAL '1 hour', -1, INTERVAL '1h', '_timescaledb_functions', 'policy_job_error_retention', pg_catalog.quote_ident(current_role)::regrole, false, '{"drop_after":"1 month"}', '_timescaledb_functions', 'policy_job_error_retention_check', false, '2000-01-01 00:00:00+00'::timestamptz ) ON CONFLICT (id) DO NOTHING; INSERT INTO _timescaledb_config.bgw_job ( id, application_name, schedule_interval, max_runtime, max_retries, retry_period, proc_schema, proc_name, owner, scheduled, config, check_schema, check_name, fixed_schedule, initial_start ) VALUES ( 3, 'Job History Log Retention Policy [3]', INTERVAL '1 month', INTERVAL '1 hour', -1, INTERVAL '1h', '_timescaledb_functions', 'policy_job_stat_history_retention', pg_catalog.quote_ident(current_role)::regrole, true, '{"drop_after":"1 month"}', '_timescaledb_functions', 'policy_job_stat_history_retention_check', true, '2000-01-01 00:00:00+00'::timestamptz ) ON CONFLICT (id) DO NOTHING;