Thread: How to access OLD and NEW with rule on update
Hi, I need to call a function when updating on a view, like : create rule udps_upd as on update to udps do instead select function_call(); My problem: how do I get a reference to OLD and NEW ? I tried function_call(OLD, NEW) -- parse error function_call(OLD.oid, NEW.oid) -- no such attributes and function_call(OLD.ctid, NEW.ctid). The last executes, but unfortunately I have no idea how to proceed in the called function. In all fmgr macros, not one seems to be concerned with a beast like a tid. Or is there some information available in the passed FunctionCallInfoData.context ? Cheers, Han Holl
"Han Holl" <han.holl@prismant.nl> writes: > I need to call a function when updating on a view, like : > create rule udps_upd as on update to udps do > instead select function_call(); > My problem: how do I get a reference to OLD and NEW ? > I tried function_call(OLD, NEW) -- parse error I think you'll need to do it as function_call(old.col1, old.col2, ..., new.col1, new.col2, ...) Pretty tedious :-( but the rule rewriter doesn't support whole-row references to OLD or NEW. regards, tom lane
On Friday 29 November 2002 02:28 am, you wrote: > "Han Holl" <han.holl@prismant.nl> writes: > > I need to call a function when updating on a view, like : > > > > create rule udps_upd as on update to udps do > > instead select function_call(); > > > > My problem: how do I get a reference to OLD and NEW ? > > > > I tried function_call(OLD, NEW) -- parse error > > I think you'll need to do it as > > function_call(old.col1, old.col2, ..., new.col1, new.col2, ...) > > Pretty tedious :-( but the rule rewriter doesn't support whole-row > references to OLD or NEW. > Thanks for the info. I was afraid of that. I't not the tediousness that's the problem though, but that I don't know the column names. And there might be 300 columns in this view. I guess it's read-only for the time being. Cheers, Han Holl