Skip to content

Create a custom retention job

Create a generic data retention policy for your entire database using a custom job

Per-hypertable built-in retention policies cover most cases. When you need one rule that walks every hypertable in the database, implement it with a custom job.

  1. Create a procedure to drop old chunks

    Create a procedure that drops chunks from any hypertable if they are older than the drop_after parameter. To get all hypertables, the timescaledb_information.hypertables table is queried.

    CREATE OR REPLACE PROCEDURE generic_retention (job_id int, config jsonb)
    LANGUAGE PLPGSQL
    AS $$
    DECLARE
    drop_after interval;
    BEGIN
    SELECT jsonb_object_field_text (config, 'drop_after')::interval
    INTO STRICT drop_after;
    IF drop_after IS NULL THEN
    RAISE EXCEPTION 'Config must have drop_after';
    END IF;
    PERFORM drop_chunks(
    format('%I.%I', hypertable_schema, hypertable_name),
    older_than => drop_after
    ) FROM timescaledb_information.hypertables;
    END
    $$;
  2. Register the job to run daily

    In the config, set drop_after to 12 months to drop chunks containing data older than 12 months.

    SELECT add_job('generic_retention','1d', config => '{"drop_after":"12 month"}');
    Note

    You can further refine this policy by adding filters to your procedure. For example, add a WHERE clause to the PERFORM query to only drop chunks from particular hypertables.