Skip to content

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.