| PostgreSQL Programmer's Guide | ||
|---|---|---|
| Prev | Chapter 12. Triggers | Next |
上記で述べたように、関数がトリガー管理によって呼ばれるとき、構造体 TriggerData *CurrentTriggerData は NOT NULL で初期化されます。ですので、 情報を読み込んだ直後にトリガー管理以外からのトリガー関数により呼び出さ れるのを避けるために、CurrentTriggerData を開始時に NULL かどうかを確 認をして NULL に設定した方が良いでしょう。
構造体 TriggerData は src/include/commands/trigger.h で次のように定 義されてます:
typedef struct TriggerData
{
TriggerEvent tg_event;
Relation tg_relation;
HeapTuple tg_trigtuple;
HeapTuple tg_newtuple;
Trigger *tg_trigger;
} TriggerData;
tg_event
はどの関数のために呼ばれるかを記述します。tg_event を試すの
に次のマクロを使うことができます:
TRIGGER_FIRED_BEFORE(event) returns TRUE if trigger fired BEFORE;
TRIGGER_FIRED_AFTER(event) returns TRUE if trigger fired AFTER;
TRIGGER_FIRED_FOR_ROW(event) returns TRUE if trigger fired for
ROW-level event;
TRIGGER_FIRED_FOR_STATEMENT(event) returns TRUE if trigger fired for
STATEMENT-level event;
TRIGGER_FIRED_BY_INSERT(event) returns TRUE if trigger fired by INSERT;
TRIGGER_FIRED_BY_DELETE(event) returns TRUE if trigger fired by DELETE;
TRIGGER_FIRED_BY_UPDATE(event) returns TRUE if trigger fired by UPDATE.
tg_relation
はトリガーされた関係を記述する構造体へのポインターです。この構造体の
詳細については src/include/utils/rel.h 見て下さい。最も興味ある事は
tg_relation->rd_att (タプル関係の記述子) と
tg_relation->rd_rel->relname (関係の名前) です。これは、char* ではなく
NameData です。もし、名前のコピーが必要であれば
SPI_getrelname(tg_relation) を使って char* を取得して下さい。
tg_trigtuple
はトリガを起動したもとのタプルへのポインタです。これは、挿入(INSERT)
されたり、削除(DELETE)されたり、あるいは更新(UPDATE)されるタプルです。
もし、挿入(INSERT)/削除(DELETE) するときで、もし、タプルを他のもので
置き換えたくない(INSERT) か、あるいは、操作をスキップしたいときは、こ
れがエグゼキュータに返すものとなります。
tg_newtuple
は、もし、更新(UPDATE)ならタプルの新しいバージョンへのポインタで、そ
して、もしこれが挿入(INSERT)あるいは削除(DELETE)に対してであれば NULL
です。もし挿入(UPDATE)で、かつ、このタプルを別のもので置き換えたくな
かったり、または、操作をスキップする時は、これはエグゼキュータへ返す
何かです。
tg_trigger
は構造体 Trigger へのポインタで、src/include/utils/rel.h の中で定義
されてます:
typedef struct Trigger
{
char *tgname;
Oid tgfoid;
func_ptr tgfunc;
int16 tgtype;
int16 tgnargs;
int16 tgattr[8];
char **tgargs;
} Trigger;
tgname はトリガーの名前、tgnargs は tgargs の中の引数の数、tgargs は
CREATE TRIGGER 文の中で指定される引数へのポインターの配列です。他のメ
ンバは内部使用のためだけです。| Prev | Home | Next |
| Triggers | Up | Visibility of Data Changes |