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.