|PostgreSQL 8.1.23 Documentation|
|Prev||Fast Backward||Chapter 39. PL/Python - Python Procedural Language||Fast Forward||Next|
When a function is used as a trigger, the dictionary TD contains trigger-related values. The trigger rows are in TD["new"] and/or TD["old"] depending on the trigger event. TD["event"] contains the event as a string (INSERT, UPDATE, DELETE, or UNKNOWN). TD["when"] contains one of BEFORE, AFTER, and UNKNOWN. TD["level"] contains one of ROW, STATEMENT, and UNKNOWN. TD["name"] contains the trigger name, 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"] to TD["args"][(n-1)].
If TD["when"] is BEFORE, you may 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.
One thing to notice is that PL/Python won't use the names of variables passed on function definition, so you should always use args[<n>] or associate it with a name before using that name.
Another thing to notice when writing trigger and functions with PL/Python is that you *shouldn't* use "DECLARE", "BEGIN" and "END". The function body starts right after the 'CREATE' line.