|PostgreSQL 8.3.23 Documentation|
|Prev||Fast Backward||Chapter 41. 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, 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, 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 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.
The structure of the row returned by TD["new"] and TD["old"] is also a dictionary. So, for instance, if it was returning a row with fields 'email' and 'person' you would access them with TD["new"]["email"] and TD["new"]["person"].
This is opposed to a class-based structure like TD["new"].email.
TD["new"] contains all of the columns, not just the ones being inserted/updated.