On Wed, Oct 9, 2013 at 08:58:46PM +0000, dwayne@docketnavigator.com wrote:
> The following bug has been logged on the website:
>
> Bug reference: 8516
> Logged by: Dwayne Towell
> Email address: dwayne@docketnavigator.com
> PostgreSQL version: 9.2.4
> Operating system: CentOS
> Description:
>
> Why doesn't PostgreSQL give a warning when calling a volatile function from
> a stable function?
>
>
> For example:
> CREATE TABLE x (val double);
>
>
> CREATE FUNCTION g() RETURNS boolean AS $$
> INSERT INTO x SELECT rand() RETURNING val>0.5;
> $$ LANGUAGE SQL VOLATILE;
>
>
> CREATE FUNCTION f() RETURNS boolean AS $$
> SELECT g(); -- this is where the stability-violation happens
> $$ LANGUAGE SQL STABLE; -- this is a lie
>
>
> According to the documentation, f() should be marked VOLATILE also, since
> calling f() produces side effects. PostgreSQL does not give a warning (or
> better yet, an error); I think it should.
I think the answer is that function authors are required to prevent
functions they mark as STABLE from calling VOLATILE functions.
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ Everyone has their own god. +