---
title: Create a custom retention job | Tiger Data Docs
description: Create a generic data retention policy for your entire database using a custom job
---

Per-hypertable [built-in retention policies](/docs/build/data-management/data-retention/create-a-retention-policy/index.md) 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.
