When a function is used as a trigger, the dictionary
TD contains trigger-related values.
TD["event"] contains the event as a
string (INSERT, UPDATE, DELETE,
TRUNCATE, or UNKNOWN). TD["when"]
contains one of BEFORE, AFTER, or UNKNOWN.
TD["level"] contains one of ROW, STATEMENT, or
UNKNOWN. For a row-level trigger, the
trigger rows are in TD["new"] and/or
TD["old"] depending on the trigger
event. TD["name"] contains the trigger
name, TD["table_name"] contains the name
of the table on which the trigger occurred, TD["table_schema"] contains the schema of the
table on which the trigger occurred, and TD["relid"] contains the OID of the table on which
the trigger occurred. If the CREATE
TRIGGER command included arguments, they are available in
TD["args"][0] to TD["args"][n-1].

If TD["when"] is BEFORE and TD["level"] is
ROW, you can return None or "OK" from the
Python function to indicate the row is unmodified, "SKIP" to abort the event, or "MODIFY" to indicate you've modified the row.
Otherwise the return value is ignored.