Re: BUG #8516: Calling VOLATILE from STABLE function - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: BUG #8516: Calling VOLATILE from STABLE function
Date
Msg-id 20131010225931.GZ7092@momjian.us
Whole thread Raw
In response to BUG #8516: Calling VOLATILE from STABLE function  (dwayne@docketnavigator.com)
Responses Re: BUG #8516: Calling VOLATILE from STABLE function  ("Dwayne Towell" <dwayne@docketnavigator.com>)
List pgsql-bugs
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. +

pgsql-bugs by date:

Previous
From: Sergey Konoplev
Date:
Subject: Re: Completely broken replica after PANIC: WAL contains references to invalid pages
Next
From: Bruce Momjian
Date:
Subject: Re: BUG #8467: Slightly confusing pgcrypto example in docs