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