Thread: Rules and actions involving multiple rows
Hi All, Just have a quick question regarding rules: In the past I've always used triggers to fire before or after events however I see that the same thing can be achieved through rules (for logging etc...) so I created a rule which fires on update (not DO INSTEAD) however it only seems to work for a single row - whereas the triggers work for all rows updated in a transaction. Is this correct and if so I presume I should be sticking to triggers if I want this kind of behaviour? Rgds, Jason
On Sun, Jul 06, 2003 at 02:48:59PM +1000, Jason Godden wrote: > In the past I've always used triggers to fire before or after events however I > see that the same thing can be achieved through rules (for logging etc...) so > I created a rule which fires on update (not DO INSTEAD) however it only seems > to work for a single row - whereas the triggers work for all rows updated in > a transaction. Rules are a once-per-statement thing, and thus appear to be "for a single row." Triggers can be once-per-row or once-per-statement. Only you know what is more appropiate in your scenario... -- Alvaro Herrera (<alvherre[a]dcc.uchile.cl>) "Limitate a mirar... y algun dia veras"
Jason Godden wrote: >Hi All, > >Just have a quick question regarding rules: > >In the past I've always used triggers to fire before or after events however I >see that the same thing can be achieved through rules (for logging etc...) so >I created a rule which fires on update (not DO INSTEAD) however it only seems >to work for a single row - whereas the triggers work for all rows updated in >a transaction. Is this correct and if so I presume I should be sticking to >triggers if I want this kind of behaviour? > >Rgds, > > Hmmm... Works for me... : testdb=# create table x (x int); CREATE TABLE testdb=# create table old_x (x int); CREATE TABLE testdb=# insert into x values (1); INSERT 17204 1 testdb=# insert into x values (2); INSERT 17205 1 testdb=# create rule xup as on update to x do insert into old_x values (old.*); CREATE RULE testdb=# update x set x=0; UPDATE 2 testdb=# select * from old_x; x --- 1 2 (2 rows) Or were you talking about something else? Dima
For me, triggers are for modifying the row being updated/deleted/inserted, while rules are for modifying other rows as part of the query. --------------------------------------------------------------------------- Jason Godden wrote: > Hi All, > > Just have a quick question regarding rules: > > In the past I've always used triggers to fire before or after events however I > see that the same thing can be achieved through rules (for logging etc...) so > I created a rule which fires on update (not DO INSTEAD) however it only seems > to work for a single row - whereas the triggers work for all rows updated in > a transaction. Is this correct and if so I presume I should be sticking to > triggers if I want this kind of behaviour? > > Rgds, > > Jason > > ---------------------------(end of broadcast)--------------------------- > TIP 9: the planner will ignore your desire to choose an index scan if your > joining column's datatypes do not match > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073