Thread: 36.3 Writing Tigger Functions in C

36.3 Writing Tigger Functions in C

From
Dmitry Igrishin
Date:
Subparagparh 3:
I suggest to replace:
"but it is passed a "context" pointer pointing to a TriggerData
structure"
with
"but it is passed a "context" pointer to a structure of type
TriggerData"

tg_trigtuple:
I'm not sure why "skip the operation" is here:
"if you don't want to replace the row with a different one (in the
case of INSERT) or skip the operation"

tg_newtuple:
I'm not sure why "skip the operation" is here:
"and you don't want to replace this row by a different one or
skip the operation"

and I suggest to replace:
"and you don't want to replace this row by a different one"
with
"and you don't want to replace the row with a different one"
anyway.

--
// Dmitry.

Re: 36.3 Writing Tigger Functions in C

From
Dmitry Igrishin
Date:


2015-08-11 13:47 GMT+03:00 Dmitry Igrishin <dmitigr@gmail.com>:
Subparagparh 3:
I suggest to replace:
"but it is passed a "context" pointer pointing to a TriggerData
structure"
with
"but it is passed a "context" pointer to a structure of type
TriggerData"
Oops, it's even better to replace with
"but it is passed a "context" pointer", because the need of
use CALLED_AS_TRIGGER macro described hereinafter.


--
// Dmitry.

Re: 36.3 Writing Tigger Functions in C

From
Marko Tiikkaja
Date:
On 8/11/15 12:47 PM, Dmitry Igrishin wrote:
> tg_trigtuple:
> I'm not sure why "skip the operation" is here:
> "if you don't want to replace the row with a different one (in the
> case of INSERT) or skip the operation"

Returning NULL from a row-level BEFORE trigger skips the operation which
fired the trigger.  So for an INSERT, any triggers which would otherwise
fire after the current trigger are not fired, and the row is not
INSERTed into the table.


.m


Re: 36.3 Writing Tigger Functions in C

From
Dmitry Igrishin
Date:


2015-08-11 14:32 GMT+03:00 Marko Tiikkaja <marko@joh.to>:
On 8/11/15 12:47 PM, Dmitry Igrishin wrote:
tg_trigtuple:
I'm not sure why "skip the operation" is here:
"if you don't want to replace the row with a different one (in the
case of INSERT) or skip the operation"

Returning NULL from a row-level BEFORE trigger skips the operation which fired the trigger.  So for an INSERT, any triggers which would otherwise fire after the current trigger are not fired, and the row is not INSERTed into the table.
Yes, but it's absolutely unclear in this place of the documentation.
Thus,
"If this trigger was fired for an INSERT or DELETE then this is what you
should return from the function if you don't want to replace the row with a
different one (in the case of INSERT) or skip the operation."
should be replaced with something like
"If this trigger was fired for an INSERT or DELETE then this is what you
should return from the function if you don't want to replace the row with a
different one (in the case of INSERT). (To skip the operation you should
return NULL.)" ?

--
// Dmitry.