Received: from rasmus.uib.no (exim@rasmus.uib.no [129.177.12.30]) by hub.org (8.10.1/8.10.1) with ESMTP id e6RHNuA96211 for ; Thu, 27 Jul 2000 13:23:56 -0400 (EDT) Received: from (wkst6) [194.248.181.116] by rasmus.uib.no with smtp (Exim 3.14) id 13HrNw-0007gl-00; Thu, 27 Jul 2000 19:23:52 +0200 Message-ID: <005801bff7ef$296d5a20$74b5f8c2@wkst6> From: "=?iso-8859-1?B?QW5kcukgTuZzcw==?=" To: References: <87k8e78yg9.fsf@matt.w80.math-hat.com> <003601bff7d9$18cdd610$74b5f8c2@wkst6> <8320.964712170@sss.pgh.pa.us> Subject: Re: Conditional rule? Date: Thu, 27 Jul 2000 19:21:55 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.00.2919.6700 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700 X-Archive-Number: 200007/261 Hm... I'm a true newbie when it comes to plpgsql and triggers, but I looked through some texts and managed to come up with the following rather odd (to me at least) behaviour: ***** create table news ( id serial, title varchar(50), time timestamp ) create table news_un ( news_id int ) Table "news_un" Attribute | Type | Modifier -----------+---------+---------- news_id | integer | create function setpublish() returns opaque as ' begin insert into news_un select news_id_seq.last_value where new.time is not null; return null; end; ' language 'plpgsql'; create trigger newstrigger after insert on news for each row execute procedure setpublish(); ***** Attempting to do an insert to news: testruledb=# insert into news (title, time) values('Test', now()); INSERT 24028 1 testruledb=# select * from news; select * from news_un; id | title | time ----+-------+------------------------ 48 | Test | 2000-07-27 19:20:24+02 (1 row) news_id --------- 47 48 (2 rows) I also tried setting time to null: testruledb=# insert into news (title) values('Test2'); INSERT 24031 1 testruledb=# select * from news; select * from news_un; id | title | time ----+-------+------ 50 | Test2 | (1 row) news_id --------- 49 (1 row) There's obviously something about triggers and functions I don't understand, any help would be greatly appreciated. Thanks André Nęss ----- Original Message ----- > "=?iso-8859-1?B?QW5kcukgTuZzcw==?=" writes: > > I wish to make rule looking something like this: > > create rule newsrule as > > on insert to news do > > if new.publishtime is not null insert into news_unpublished > > values(new.id); > > > I.e. "On an insert to news, if new.publish is not null, insert the new > > post's id into news_unpublished. > > What you want here is a trigger, not a rule. The closest you could come > with a rule is to copy *all* unpublished ids into news_unpublished each > time something got inserted into news. There are applications for that > sort of thing, but this ain't it. See the trigger examples in the > plpgsql or pltcl sections of the manual. > > regards, tom lane >