Re: functions marked STABLE not allowed to do INSERT - Mailing list pgsql-hackers

From Jim C. Nasby
Subject Re: functions marked STABLE not allowed to do INSERT
Date
Msg-id 20051114200941.GG18570@pervasive.com
Whole thread Raw
In response to Re: functions marked STABLE not allowed to do INSERT  (Tino Wildenhain <tino@wildenhain.de>)
Responses Re: functions marked STABLE not allowed to do INSERT  (Robert Treat <xzilla@users.sourceforge.net>)
List pgsql-hackers
ISTM that instead of comming up with clever ways to fool the parser it
would be better to allow users to force a function to be marked as
STABLE, etc., even though it's contents indicate that it shouldn't be.
Since the standard IMMUTABLE | STABLE | VOLATILE is obviously a bad
choice, I suggest adding [FORCE] as an option, so you could do FORCE
STABLE.

On Mon, Nov 14, 2005 at 08:55:03PM +0100, Tino Wildenhain wrote:
> > stable functions must show an stable image of the database, but if you
> > start to do insertions, deletions and so how stable the image is?
> 
> No, the definiton is:
> STABLE indicates that within a single table scan the function will
> consistently return the same result for the same argument values, but
> that its result could change across SQL statements. 
> 
> And I'm not speaking of delete. My common usecase is
> lookup of key in surrogate-key table and generating
> one if not found. If it would break on DELETE 
> I'd understand it, but it breaks on INSERT which isnt
> acceptable imho.
> 
> > now, i don't like the behaviour of letting call volatile functions
> > inside immutable/stable ones... but some people use it to do what they
> > think is good...
> 
> Now, we are forcing people to not use INSERT in a STABLE
> function but we happily allow them to use VOLATILE
> functions where the real danger lives. Doesnt sound
> very logical to me.
> 
> > if you know you can call volatile functions from stable ones maybe you
> > asked enough or read enough to actually know what you are doing...
> 
> Thats the point. I know what I'm doing with my INSERT
> but am not allowed, but if I didnt know what I do and
> use a volatile function, I can happily do that.
> 
> > but if you simply put inserts in your stable functions and expect to
> > work, maybe you are not reading enough... you can ask to yourself, am
> > i reading enough to actually know what am i doing?
> 
> Yes I do.
> > 
> > conclusion: think in it as a netsafe for novices, if you think you are
> > expert enough take the net off (calling the volatile functions)
> 
> Yes sure, but since the change does not really prevent noobs
> from doing bad things [tm], it should be reverted or at least
> kept consequence - which would be to ban volatile
> funtions too.
> 
> (IMHO only calling volatile functions should be banned)
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
>        choose an index scan if your joining column's datatypes do not
>        match
> 

-- 
Jim C. Nasby, Sr. Engineering Consultant      jnasby@pervasive.com
Pervasive Software      http://pervasive.com    work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf       cell: 512-569-9461


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: functions marked STABLE not allowed to do INSERT
Next
From: Rod Taylor
Date:
Subject: Re: 8.0 -> 8.1 dump duplicate key problem?