To właśnie robię w PostgreSQL 9.2, chociaż muszę przyznać, że nie znalazłem dokumentacji tego podejścia. Istnieje funkcja pg_trigger_depth()
udokumentowane tutaj, którego używam do rozróżnienia między oryginalnymi i zagnieżdżonymi wywołaniami w wyzwalaczu.
CREATE TRIGGER trg_taxonomic_positions
AFTER INSERT OR UPDATE OF taxonomic_position
ON taxon_concepts
FOR EACH ROW
WHEN (pg_trigger_depth() = 0)
EXECUTE PROCEDURE trg_taxonomic_positions()