PL/Perlトリガ

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 41章PL/Perl - Perl手続き言語 | 早送り | 次のページ

# 41.6. PL/Perlトリガ

PL/Perlを使用してトリガ関数を作成することができます。 トリガ関数では、`$_TD`というハッシュへの参照に、現在のトリガイベントに関する情報が含まれています。 `$_TD`は大域変数であり、各トリガ呼び出しに対して局所的な値を別々に取り出します。 以下に`$_TD`というハッシュへの参照のフィールドを示します。

`$_TD->{new}{foo}`

  `NEW`の`foo`列値。

`$_TD->{old}{foo}`

  `OLD`の`foo`列値。

`$_TD->{name}`

  呼び出されたトリガの名前。

`$_TD->{event}`

  トリガイベント。 `INSERT`、`UPDATE`、`DELETE`、`TRUNCATE`、もしくは`UNKNOWN`。

`$_TD->{when}`

  トリガがいつ呼び出されたか。 `BEFORE`、`AFTER`、`INSTEAD OF`もしくは`UNKNOWN`。

`$_TD->{level}`

  トリガレベル。 `ROW`、`STATEMENT`、もしくは`UNKNOWN`。

`$_TD->{relid}`

  トリガの発行元テーブルのOID。

`$_TD->{table_name}`

  トリガの発行元テーブルの名前。

`$_TD->{relname}`

  トリガの発行元テーブルの名前。 これは廃止予定で、将来のリリースで削除される可能性があります。 代わりに$_TD->{table_name}を使用してください。

`$_TD->{table_schema}`

  トリガの発行元テーブルが存在するスキーマの名前。

`$_TD->{argc}`

  トリガ関数の引数の数。

`@{$_TD->{args}}`

  トリガ関数の引数。 `$_TD->{argc}`が0の場合は存在しません。

行レベルトリガは以下のいずれかを返すことができます。

`return;`

  操作を実行します。

`"SKIP"`

  操作を実行しません。

`"MODIFY"`

  トリガ関数によって`NEW`行が変更されたことを示します。

以下はトリガ関数の例で、ここまでの説明の一部を例証するものです。

    CREATE TABLE test (
        i int,
        v varchar
    );

    CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
        if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
            return "SKIP";    # INSERT/UPDATEコマンドを取消します。
        } elsif ($_TD->{new}{v} ne "immortal") {
            $_TD->{new}{v} .= "(modified by trigger)";
            return "MODIFY";  # 行を変更し、INSERT/UPDATEコマンドを実行します。
        } else {
            return;           # INSERT/UPDATEコマンドを実行します。
        }
    $$ LANGUAGE plperl;

    CREATE TRIGGER test_valid_id_trig
        BEFORE INSERT OR UPDATE ON test
        FOR EACH ROW EXECUTE PROCEDURE valid_id();

前のページ | ホーム | 次のページ
信頼されたPL/Perlおよび信頼されないPL/Perl | 上に戻る | PL/Perlの内部