postgres=# create function non_im_immutable_function() returns float as $$ begin return random(); end; $$ language plpgsql immutable; CREATE FUNCTION
postgres=# select proname, provolatile from pg_proc where proname = 'random' or proname = 'non_im_immutable_function'; proname | provolatile ---------------------------+------------- random | v non_im_immutable_function | i
Even checking whether the output of the function is in the right order or not, has its cost. I am suggesting that we can eliminate this cost as well. For example, PostgreSQL does not check whether a function is really immutable or not.
Actually, it does:
select test(); ERROR: UPDATE is not allowed in a non-volatile function CONTEXT: SQL statement "UPDATE i SET i=i+1" PL/pgSQL function test() line 3 at SQL statement STATEMENT: select test(); ERROR: UPDATE is not allowed in a non-volatile function CONTEXT: SQL statement "UPDATE i SET i=i+1" PL/pgSQL function test() line 3 at SQL statement
-- Jim Nasby, Data Architect, Blue Treble Consulting Data in Trouble? Get it in Treble! http://BlueTreble.com
--
Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company