¾�ΥС�������ʸ�� �� 17 | 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

33.3. C�ˤ��ȥꥬ�ؿ��κ���

����Ǥϥȥꥬ�ؿ��ȤΥ��󥿥ե������ˤĤ������٥�ʾܺ٤��������ޤ��� ���ξ����C����ǥȥꥬ�ؿ������������ˤΤ�ɬ�פǤ��� ���٥�ʸ���Ǻ�������С����������ܺ٤�����˰��äƤ�館�ޤ��� �����Ƥ��ξ�硢C�ǥȥꥬ������������˼�³���������Ѥ��뤳�Ȥ�Ƥ���٤��Ǥ��� �Ƽ�³�������ʸ��ǡ����θ������Ѥ����ȥꥬ����κ�����ˡ���������ޤ���

�ȥꥬ�ؿ���"version 1"�ؿ��ޥ͡����㥤�󥿥ե�������Ȥ�ʤ��ƤϤ����ޤ���

�ؿ����ȥꥬ�ޥ͡����㤫��ƤӽФ������ϡ��̾�ΰ������Ϥ����ΤǤϤʤ���TriggerData��¤�Τ�ؤ�"context"�ݥ��󥿤��Ϥ���ޤ��� C�ؿ��ϡ��ȥꥬ�ޥ͡����㤫��ƤӽФ��줿�Τ��ɤ�����ʲ��Υޥ�����¹Ԥ��뤳�ȤǸ������뤳�Ȥ��Ǥ��ޤ���

CALLED_AS_TRIGGER(fcinfo)

����ϰʲ���Ÿ������ޤ���

((fcinfo)->context != NULL && IsA((fcinfo)->context, TriggerData))

�⤷���줬�����֤���硢fcinfo->context��TriggerData *���˥��㥹�Ȥ����ؤ��줿TriggerData��¤�Τ���Ѥ��뤳�Ȥϰ����Ǥ��� ���δؿ��ϡ�TriggerData��¤�Τ䤽�줬�ؤ��ɤΤ褦�ʥǡ������ѹ����Ƥ������ޤ�����

struct TriggerData��commands/trigger.h������������Ƥ��ޤ���

typedef struct TriggerData
{
    NodeTag       type;
    TriggerEvent  tg_event;
    Relation      tg_relation;
    HeapTuple     tg_trigtuple;
    HeapTuple     tg_newtuple;
    Trigger      *tg_trigger;
    Buffer        tg_trigtuplebuf;
    Buffer        tg_newtuplebuf;
} TriggerData;

���Фϲ����Τ褦���������Ƥ��ޤ���

type

���T_TriggerData�Ǥ���

tg_event

���δؿ����ƤӽФ��줿���٥�Ȥ򵭽Ҥ��ޤ��� tg_event��Ĵ�٤뤿��ˤϲ����Υޥ�����Ȥ����Ȥ��Ǥ��ޤ���

TRIGGER_FIRED_BEFORE(tg_event)

�ȥꥬ��BEFORE��ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_AFTER(tg_event)

�ȥꥬ��AFTER��ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_FOR_ROW(tg_event)

�ȥꥬ���ԥ�٥�Υ��٥�Ȥ�ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_FOR_STATEMENT(tg_event)

�ȥꥬ��ʸ��٥�Υ��٥�Ȥ�ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_BY_INSERT(tg_event)

�ȥꥬ��INSERT���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_BY_UPDATE(tg_event)

�ȥꥬ��UPDATE���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���

TRIGGER_FIRED_BY_DELETE(tg_event)

�ȥꥬ��DELETE���ޥ�ɤ�ȯ�Ԥ��줿��翿���֤��ޤ���

tg_relation

�ȥꥬ��ȯ�Ը��Υ�졼�����򵭽Ҥ��빽¤�ΤؤΥݥ��󥿤Ǥ��� ���ι�¤�ΤˤĤ��Ƥξܺ٤ϡ�utils/rel.h�򻲾Ȥ��Ƥ��������� �Ǥⶽ̣�����Τϡ�tg_relation->rd_att�ʥ�졼����󥿥ץ�ε��һҡˤ�tg_relation->rd_rel->relname�Ǥ��ʥ�졼�����̾�������char*�ǤϤʤ�NameData�Ǥ��� ̾���Υ��ԡ���ɬ�פʾ��ϡ�char*�����뤿���SPI_getrelname(tg_relation)����Ѥ��Ƥ��������ˡ�

tg_trigtuple

�ȥꥬ��ȯ�Ԥ��줿�ԤؤΥݥ��󥿤Ǥ��� �������������롢�������롢���뤤�Ϲ��������ԤǤ��� �⤷INSERT/DELETE�Ǥ��Υȥꥬ��ȯ�Ԥ��줿�������ιԤ��̤Τ�Τ��֤����������ʤ���INSERT�ξ��˾��䡢�����������Ф������ʤ����ϡ�����򤳤δؿ������֤��Ƥ���������

tg_newtuple

�ȥꥬ��UPDATE��ȯ�Ԥ��줿���ϡ��Ԥο������С������ؤΥݥ��󥿤Ǥ��� INSERT�⤷����DELETE�ξ��ϡ�NULL�Ǥ��� UPDATE���٥�Ȥλ������ιԤ��̤Τ�Τ��֤����������ʤ������������Ф������ʤ����ϡ�����򤳤δؿ������֤��Ƥ���������

tg_trigger

�ʲ��Τ褦��utils/rel.h��������줿��Trigger��¤�ΤؤΥݥ��󥿤Ǥ���

typedef struct Trigger
{
    Oid         tgoid;
    char       *tgname;
    Oid         tgfoid;
    int16       tgtype;
    bool        tgenabled;
    bool        tgisconstraint;
    Oid         tgconstrrelid;
    bool        tgdeferrable;
    bool        tginitdeferred;
    int16       tgnargs;
    int16       tgnattr;
    int16      *tgattr;
    char      **tgargs;
} Trigger;

�����ǡ�tgname���ȥꥬ��̾����tgnargs��tgargs��ΰ����ο���tgargs��CREATE TRIGGERʸ�ǻ��ꤵ�줿�����ؤΥݥ��󥿤�����Ǥ��� ¾�Υ��Ф������ǤΤ߻��Ѥ���ޤ���

tg_trigtuplebuf

tg_trigtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���

tg_newtuplebuf

tg_newtuple��ޤ�Хåե��Ǥ��� �����������ץ뤬¸�ߤ��ʤ�����ǥ������Хåե���˳�Ǽ����Ƥ��ʤ�����InvalidBuffer�Ǥ���

�ȥꥬ�ؿ���HeapTuple�ݥ��󥿤⤷����NULL�ݥ��󥿡�SQL��NULL�Ǥ�����ޤ����� �������äơ�isNull�Ͽ��ˤϤʤ�ޤ���ˤΤɤ��餫���֤��ʤ���Фʤ�ޤ��� ����оݤιԤ��ѹ��������ʤ����ϡ����դ��ơ�tg_trigtuple��tg_newtuple��Ŭ�ڤ������֤��Ƥ���������