# 45.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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.postgresql.tw/13/server-programming/pl-python-python-procedural-language-1/trigger-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
