Re: stable for each row before insert trigger - Mailing list pgsql-general

From Олег Самойлов
Subject Re: stable for each row before insert trigger
Date
Msg-id CDE5F13C-FF3E-4FA5-BEC7-4ABBBD62A768@ya.ru
Whole thread Raw
In response to Re: stable for each row before insert trigger  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: stable for each row before insert trigger
List pgsql-general
Luca, I also read this section before ask the question.

> 18 окт. 2019 г., в 10:15, Tom Lane <tgl@sss.pgh.pa.us> написал(а):
>
> =?utf-8?B?0J7Qu9C10LMg0KHQsNC80L7QudC70L7Qsg==?= <splarv@ya.ru> writes:
>> According to documentation the words "VOLATILE, STABLE, IMMUTABLE" is somehow useful with trigger functions, for
instancementioned that the AFTER INSERT trigger should be VOLATILE. The question is how this words affect a for each
rowbefore insert trigger? Can be some optimisation here? 
>
> Where did you read that?  There's no optimization that considers the
> volatility of trigger functions --- they'll be called exactly when
> specified, no more or less.

Good to see this. :) But there is somehow optimisation for triggers, which is somehow mentioned in the documentation,
butnot clearly defined. 

https://www.postgresql.org/docs/current/sql-createfunction.html

> STABLE indicates .... (It is inappropriate for AFTER triggers that wish to query rows modified by the current
command.)

So, STABLE is inappropriate for such trigger, but is appropriate for BEFORE trigger?

Luca correctly pointed to:
https://www.postgresql.org/docs/current/trigger-datachanges.html

> If your trigger function is written in any of the standard procedural languages, then the above statements apply only
ifthe function is declared VOLATILE. Functions that are declared STABLE or IMMUTABLE will not see changes made by the
callingcommand in any case. 

So will be good put inside right section

https://www.postgresql.org/docs/current/xfunc-volatility.html

Exact definition how "VOLATILE, STABLE, IMMUTABLE" affect a trigger function.

For instance, I expect that the FOR EACH ROW BEFORE trigger marked as STABLE will be faster than VOLATILE without
importantnegative side effects. I observed 3% benefit. IMMUTABLE trigger is slightly slower then STABLE, but I am not
sure,too low difference. 





pgsql-general by date:

Previous
From: Ekaterina Amez
Date:
Subject: Re: Sv: Conflict between autovacuum and backup restoration
Next
From: Luca Ferrari
Date:
Subject: Re: Postgres Point in time Recovery (PITR),