46.6. Trigger Functions

|46.6. Trigger Functions |                   |                                                  |                  |                               |
|:----------------------:|-------------------|--------------------------------------------------|------------------|-------------------------------|
|[Prev](plpython-do.html)|[Up](plpython.html)|Chapter 46. PL/Python — Python Procedural Language|[Home](index.html)| [Next](plpython-database.html)|

---

## 46.6. Trigger Functions

[]()

 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`, or `TRUNCATE`.

`TD["when"]`

 contains one of `BEFORE`, `AFTER`, or `INSTEAD OF`.

`TD["level"]`

 contains `ROW` or `STATEMENT`.

`TD["new"]`  
`TD["old"]`

 For a row-level trigger, one or both of these fields contain the respective trigger rows, 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.

`TD["relid"]`

 contains the OID of the table on which the trigger occurred.

`TD["args"]`

 If the `CREATE TRIGGER` command included arguments, they are available in `TD["args"][0]` to `TD["args"][*`n`*-1]`.

 If `TD["when"]` is `BEFORE` or `INSTEAD OF` 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 if `TD["event"]` is `INSERT` or `UPDATE` you can return `"MODIFY"` to indicate you've modified the new row. Otherwise the return value is ignored.

---

| [Prev](plpython-do.html)  |[Up](plpython.html)| [Next](plpython-database.html)|
|:--------------------------|:-----------------:|------------------------------:|
|46.5. Anonymous Code Blocks|[Home](index.html) |     46.7. Database Access     |

 // \<![CDATA[ \<-- For SVG support if ('WebSocket' in window) { (function() { function refreshCSS() { var sheets = [].slice.call(document.getElementsByTagName("link")); var head = document.getElementsByTagName("head")[0]; for (var i = 0; i \< sheets.length; ++i) { var elem = sheets[i]; head.removeChild(elem); var rel = elem.rel; if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") { var url = elem.href.replace(/(&|\\?)\_cacheOverride=\\d+/, ''); elem.href = url + (url.indexOf('?') \>= 0 ? '&' : '?') + '\_cacheOverride=' + (new Date().valueOf()); } head.appendChild(elem); } } var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'; var address = protocol + window.location.host + window.location.pathname + '/ws'; var socket = new WebSocket(address); socket.onmessage = function(msg) { if (msg.data == 'reload') window.location.reload(); else if (msg.data == 'refreshcss') refreshCSS(); }; console.log('Live reload enabled.'); })(); } // ]]\>