| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 32. 信息模式 | Fast Forward | Next |
視圖 triggers 包含所有定義在當前數據庫,並且屬于當前用戶的觸發器。 (表的所有者也是觸發器的所有者。)
Table 32-35. triggers 字段
| 名字 | 數據類型 | 描述 |
|---|---|---|
| trigger_catalog | sql_identifier | 包含該觸發器的數據庫名字(總是當前數據庫) |
| trigger_schema | sql_identifier | 包含該觸發器的模式名字 |
| trigger_name | sql_identifier | 觸發器名字 |
| event_manipulation | character_data | 激發觸發器的事件((INSERT,UPDATE,或者DELETE) |
| event_object_catalog | sql_identifier | 觸發器定義所在的表所在的數據庫名字(總是當前數據庫) |
| event_object_schema | sql_identifier | 包含觸發器定義所在表的模式的名字 |
| event_object_name | sql_identifier | 觸發器定義所在的表的名字 |
| action_order | cardinal_number | 尚未實現 |
| action_condition | character_data | 應用于一個 PostgreSQL 裡沒有的特性 |
| action_statement | character_data | 觸發器執行的語句(目前總是 EXECUTE PROCEDURE function(...)) |
| action_orientation | character_data | 標識觸發器是對處理的每一行激發還是對每個語句(ROW 或者 STATEMENT) |
| condition_timing | character_data | 觸發器觸發的時間(BEFORE 或者 AFTER) |
| condition_reference_old_table | sql_identifier | 應用于一個 PostgreSQL 裡沒有的特性 |
| condition_reference_new_table | sql_identifier | 應用于一個 PostgreSQL 裡沒有的特性 |
PostgreSQL 裡面的觸發器在影響到信息模式的表現形式方面, 與 SQL 標準有兩處不同。首先,在 PostgreSQL 裡,觸發器名字是表本地的對象, 兒不是獨立的模式對象。因此,我們可以在一個模式裡定義重復的觸發器名字,只要他們屬于不同的表。 (trigger_catalog 和 trigger_schema 實際上是用于觸發器定義所在表的名字。) 第二,PostgreSQL 裡的觸發器可以定義為在多個事件上觸發(比如 ON INSERT OR UPDATE), 而 SQL 標準只允許一個。如果一個觸發器定義為在多個事件上觸發,那麼在信息模式裡它會表現為多行, 每個事件一行。因為這兩個原因,視圖 triggers 的主鍵實際上是 (trigger_catalog, trigger_schema, trigger_name, event_object_name, event_manipulation), 而不是 (trigger_catalog, trigger_schema, trigger_name), 後者是 SQL 標準聲明的。當然,如果你定義一個遵循 SQL 標準的觸發器(觸發器名字在模式中唯一, 並且每個觸發器只有一個事件),這些事情不會煩著你。