Bruno Wolff III wrote:
On Sat, Oct 02, 2004 at 15:04:51 -0500,
  Bruno Wolff III <[EMAIL PROTECTED]> wrote:

On Sat, Oct 02, 2004 at 10:43:01 +0200,

There has been such a distinction for a major release or two. "Stable"
is how you mark a function that will return the same value within a
single transaction.


I should have said within a single statement instead of within a single
transaction.

I know that but a stable function is not called once inside the same query, instead an immutable is:

sp_immutable() is a simple immutable function
sp_stable() is a simple stable function
sp_foo() is a simple function

test is a table with two rows in it.

regression=# select sp_stable(), sp_immutable(), sp_foo() from test;
NOTICE:  sp_immutable called
NOTICE:  sp_stable called
NOTICE:  sp_foo called
NOTICE:  sp_stable called
NOTICE:  sp_foo called
 sp_stable | sp_immutable | sp_foo
-----------+--------------+--------
         0 |            0 |      0
         0 |            0 |      0
(2 rows)


so now do you see what do I mean ?

The stable function is threated "stable" only if inserted inside a filter:

regression=# select * from test where sp_stable() = 3;
NOTICE:  sp_stable called
 a
---
(0 rows)


and from this point of view immutable is not immutable enough:

regression=# select sp_immutable() from test where sp_immutable() = 3;
NOTICE:  sp_immutable called
NOTICE:  sp_immutable called
 sp_immutable
--------------
(0 rows)




Regards Gaetano Mendola






















---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster

Reply via email to