Skip to content
Join us at Tiger Data Aggregate 2026 for workshops, talks, and networking.

Automate tasks with triggers

Use PostgreSQL triggers to automatically execute functions when data changes occur in TimescaleDB hypertables

TimescaleDB supports PostgreSQL triggers on a hypertable the same way you use them on a regular table. When you create, alter, drop, enable, or disable a trigger on a hypertable — including via ALTER TABLE … ENABLE/DISABLE TRIGGER with the ALL, USER, ALWAYS, and REPLICA variants — TimescaleDB propagates the change to every chunk.

This example creates a new table called error_conditions with the same schema as conditions, but that only stores records which are considered errors. An error, in this case, is when an application sends a temperature or humidity reading with a value that is greater than or equal to 1000.

  1. Create a function that inserts erroneous data into the error_conditions table
    CREATE OR REPLACE FUNCTION record_error()
    RETURNS trigger AS $record_error$
    BEGIN
    IF NEW.temperature >= 1000 OR NEW.humidity >= 1000 THEN
    INSERT INTO error_conditions
    VALUES(NEW.time, NEW.location, NEW.temperature, NEW.humidity);
    END IF;
    RETURN NEW;
    END;
    $record_error$ LANGUAGE plpgsql;
  2. Create a trigger that calls this function whenever a new row is inserted into the hypertable
    CREATE TRIGGER record_error
    BEFORE INSERT ON conditions
    FOR EACH ROW
    EXECUTE FUNCTION record_error();
  3. Verify that error rows are captured

    All data is inserted into the conditions table, but rows that contain errors are also added to the error_conditions table.

For all supported trigger types and clauses, see the PostgreSQL CREATE TRIGGER docs.

  • Triggers are not supported on continuous aggregates.
  • ROW-level triggers with transition tables are not supported on hypertables.
  • DELETE triggers with transition tables are not supported.