Re: Stable functions problem

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Gaetano Mendola <mendola(at)bigfoot(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Stable functions problem
Date: 2004-12-19 20:30:29
Message-ID: 16285.1103488229@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Gaetano Mendola <mendola(at)bigfoot(dot)com> writes:
> I'm having a bounce of errors because IMMUTABLE and STABLE
> attributes for some of my functions. Let me explain with an example,

Hmm. This particular example is a bug in exec_eval_simple_expr() ...
if we're going to bypass SPI then we'd better do the things SPI does
that are needed to maintain the correct execution environment, and
as of 8.0 one of those things is to advance ActiveSnapshot.
I've applied a patch for this. (Memo to self: I'm beginning to wonder
if exec_eval_simple_expr is worth the trouble at all, compared to just
using SPI. The amount of overhead it saves seems to get less with each
new release.)

> now here I can continue my function using the my_id_user, unfortunatelly
> that sp_id_user is declared as IMMUTABLE this mean that at the second call
> of sp_id_user my_id_user will not contain the user id.

That actually doesn't have anything to do with it --- the same failure
would have occurred if you'd (correctly) declared sp_id_user as STABLE.
So it's a good bug report. But I trust you do realize you are playing
with fire. While I have been heard to suggest mislabeling functions
as immutable if they're only going to be used in interactive queries,
I don't think I have ever failed to mention that you *will* get burnt
if you call such functions from other functions. When this coding
someday does break for you, I won't have any sympathy at all...

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2004-12-19 20:50:08 Re: Bitmapset data type???
Previous Message Alvaro Herrera 2004-12-19 18:31:44 Re: Shared row locking