C'est ce que je fais dans PostgreSQL 9.2, même si je dois admettre que je n'ai pas trouvé cette approche documentée. Il existe une fonction pg_trigger_depth()
documenté ici, que j'utilise pour différencier les appels d'origine des appels imbriqués dans le déclencheur.
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()