★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

34.47. triggers

triggersビューには、現在のデータベースで定義された、現在のユーザが所有するあるいは何らかのSELECT以外の権限を持つ、全てのトリガがあります。

表 34-45. triggersの列

名前データ型説明
trigger_catalogsql_identifierトリガを持つデータベースの名前です(常に現在のデータベースです)。
trigger_schemasql_identifierトリガを持つスキーマの名前です。
trigger_namesql_identifierトリガの名前です。
event_manipulationcharacter_dataトリガを発するイベントです (INSERTUPDATEもしくはDELETEです)。
event_object_catalogsql_identifierトリガが定義されたテーブルを持つデータベースの名前です (常に現在のデータベースです)。
event_object_schemasql_identifierトリガが定義されたテーブルを持つスキーマの名前です。
event_object_tablesql_identifierトリガが定義されたテーブルの名前です。
action_ordercardinal_number未実装です。
action_conditioncharacter_dataトリガのWHEN条件です。なければNULLです (現在有効なロールが所有していないテーブルの場合もNULLです)。
action_statementcharacter_dataトリガによって実行される文です (現在は常にEXECUTE PROCEDURE function(...)です)。
action_orientationcharacter_dataトリガの発行が処理行ごとか文ごとかを識別します (ROWもしくはSTATEMENTです)。
condition_timingcharacter_dataトリガを発する時期です (BEFOREもしくはAFTERです)。
condition_reference_old_tablesql_identifierPostgreSQLで利用できない機能に適用されるものです。
condition_reference_new_tablesql_identifierPostgreSQLで利用できない機能に適用されるものです。
condition_reference_old_rowsql_identifierPostgreSQLで利用できない機能に適用されるものです。
condition_reference_new_rowsql_identifierPostgreSQLで利用できない機能に適用されるものです。
createdtime_stampPostgreSQLで利用できない機能に適用されるものです。

PostgreSQLにおけるトリガには、標準SQLと比べ、2つの非互換があり、これらは情報スキーマの表現に影響を与えます。 1つ目は、PostgreSQLではトリガ名は、独立したスキーマオブジェクトではなく、テーブル内で局所的であることです。 そのため、別のテーブルに属している場合、1つのスキーマ内でトリガ名を重複させることができます。 (trigger_catalogtrigger_schemaは実際、そのトリガが定義されたテーブルに属する値となります。) 2つ目は、PostgreSQLではトリガは複数のイベントで発行できる点です(例えばON INSERT OR UPDATEです)。 一方、標準SQLでは1つのみしか許されません。 トリガが複数のイベントで発行するように定義された場合、それぞれのイベントで1行という形で、情報スキーマ内では複数の行として表現されます。 これらの2つの問題の結果、triggersビューのプライマリキーは実際、標準SQLで定義された(trigger_catalog, trigger_schema, trigger_name)ではなく、(trigger_catalog, trigger_schema, trigger_name, event_object_table, event_manipulation)となります。 それでもなお、標準SQLに従う(スキーマ内でトリガ名を一意とし、トリガに対し1種類のイベントしか持たせないという)手法でトリガを定義していれば、これは影響ありません。