Обсуждение: Trigger questions

Поиск
Список
Период
Сортировка

Trigger questions

От
DAVID ROTH
Дата:
1) Can I create a trigger on a view?
2) Do triggers cascade?

Say I have an insert trigger on a table.
And, I have an insert trigger on a view that references this table
If I do an insert on the view, will both triggers fire?

Re: Trigger questions

От
Justin
Дата:


On Thu, May 4, 2023 at 9:49 AM DAVID ROTH <adaptron@comcast.net> wrote:
1) Can I create a trigger on a view?
2) Do triggers cascade?

Say I have an insert trigger on a table.
And, I have an insert trigger on a view that references this table
If I do an insert on the view, will both triggers fire?

Can not have triggers on Views,  Views use  RULES  which are DO INSTEAD.
https://www.postgresql.org/docs/current/rules.html

Yes if you have an INSERT/UPDATE/DELETE rule on a view  that inserts into a table then that table's triggers will be executed. 

Please note RULES should  be avoided beyond the use case for VIEWS.  RULES are executed very early in the query tree; it is not trivial to write rules on Tables.

Thanks

Re: Trigger questions

От
Adrian Klaver
Дата:
On 5/4/23 07:03, Justin wrote:
> 
> 
> On Thu, May 4, 2023 at 9:49 AM DAVID ROTH <adaptron@comcast.net 
> <mailto:adaptron@comcast.net>> wrote:
> 
>     __
>     1) Can I create a trigger on a view?
>     2) Do triggers cascade?
> 
>     Say I have an insert trigger on a table.
>     And, I have an insert trigger on a view that references this table
>     If I do an insert on the view, will both triggers fire?
> 
> 
> Can not have triggers on Views,  Views use  RULES  which are DO INSTEAD.
> https://www.postgresql.org/docs/current/rules.html 
> <https://www.postgresql.org/docs/current/rules.html>

That is wrong.

See

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

The following table summarizes which types of triggers may be used on 
tables, views, and foreign tables:

> 
> Yes if you have an INSERT/UPDATE/DELETE rule on a view  that inserts 
> into a table then that table's triggers will be executed.
> 
> Please note RULES should  be avoided beyond the use case for VIEWS.  
> RULES are executed very early in the query tree; it is not 
> trivial to write rules on Tables.
> 
> Thanks

-- 
Adrian Klaver
adrian.klaver@aklaver.com




Re: Trigger questions

От
"David G. Johnston"
Дата:
On Thu, May 4, 2023 at 7:04 AM Justin <zzzzz.graf@gmail.com> wrote:


On Thu, May 4, 2023 at 9:49 AM DAVID ROTH <adaptron@comcast.net> wrote:
1) Can I create a trigger on a view?
2) Do triggers cascade?

Say I have an insert trigger on a table.
And, I have an insert trigger on a view that references this table
If I do an insert on the view, will both triggers fire?

Can not have triggers on Views,  Views use  RULES  which are DO INSTEAD.
https://www.postgresql.org/docs/current/rules.html

Our users need not care or even know about this particular implementation detail of views.  For them, views are a fundamental concept.

The description of create trigger makes is perfectly clear that views are a valid "table-like" target for a trigger.

> CREATE TRIGGER creates a new trigger. CREATE OR REPLACE TRIGGER will either create a new trigger, or replace an existing trigger. The trigger will be associated with the specified table, view, or foreign table and will execute the specified function function_name when certain operations are performed on that table.


Depending on the view definition, the need for a trigger may be removed since some views are auto-updatable.

David J.