Обсуждение: question on rules
hi folks, i'd like to write an rule which fills out some empty attrs on insert (w/ data from other given attrs). the table structure is: CREATE TABLE foo (start date, duration integer, endtime date); and the rule is: CREATE RULE foo1 AS ON INSERT TO foo WHERE new.endtime = NULL DO INSERT INTO foo SELECT new.start, new.duration, new.start+ new.duration; when i try to insert some data (INSERT INTO foo SELECT '2003-01-01', '12';) i get the error: query rewritten 10 times, may contain cycles. how can i avoid this loop ? cu -- ---------------------------------------------------------------------Enrico Weigelt == metux ITS Webhosting ab 5 EUR/Monat. UUCP, rawIP und vieles mehr. phone: +49 36207 519931 www: http://www.metux.de/ fax: +49 36207 519932 email: contact@metux.decellphone:+49 174 7066481 smsgate: sms.weigelt@metux.de ---------------------------------------------------------------------Diese Mail wurde mit UUCP versandt. http://www.metux.de/uucp/
weigelt@metux.de writes: > i'd like to write an rule which fills out some empty attrs on > insert (w/ data from other given attrs). You'd be better off doing this with a BEFORE INSERT trigger. regards, tom lane
Tom Lane wrote: > weigelt@metux.de writes: >> i'd like to write an rule which fills out some empty attrs on >> insert (w/ data from other given attrs). > > You'd be better off doing this with a BEFORE INSERT trigger. The only way to do it with rules would be to create a view over the basetable, create an insert rule over the view and then have the application doing the insert into the view instead. So "better" could be considered an understatement :-) Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com #
Dnia 2003-06-13 03:26, Uz.ytkownik weigelt@metux.de napisa?: > hi folks, > > i'd like to write an rule which fills out some empty attrs on > insert (w/ data from other given attrs). > > the table structure is: > CREATE TABLE foo (start date, duration integer, endtime date); > > and the rule is: > CREATE RULE foo1 AS ON INSERT TO foo WHERE new.endtime = NULL DO > INSERT INTO foo SELECT new.start, new.duration, new.start + new.duration; > > when i try to insert some data (INSERT INTO foo SELECT '2003-01-01', '12';) > i get the error: query rewritten 10 times, may contain cycles. > > how can i avoid this loop ? For this case creating trigger would be much better than rule. I think, you can't use rules this way. Regards, Tomasz Myrta