PostgreSQL provides triggers and rule systems to automatically perform a certain function when an event, such as INSERT, UPDATE, or DELETE, is performed. Triggers and rules cannot be defined on SELECT statements, except for _RETURN, which is used in the internal implementation of PostgreSQL views.
From a functionality point of view, the trigger system is more generic; it can be used to implement complex actions more easily than rules. However, both trigger and rule systems can be used to implement the same functionalities in several cases. From a performance point of view, rules tend to be faster than triggers, but triggers tend to be simpler and more compatible with other RDBMs, since the rule system is a PostgreSQL extension.