Thread: Volatile functions in subqueries don't prevent subqueries from being evaluated in initplans?

Hm, shouldn't this query notice that random() is volatile and not make the
subquery an initplan?


postgres=#  select i, (select (random()*1000)::integer  ) from x limit 5;i | ?column? 
---+----------1 |      6772 |      6773 |      6774 |      6775 |      677
(5 rows)

postgres=# explain  select i, (select (random()*1000)::integer  ) from x limit 5;                       QUERY PLAN
                  
 
-----------------------------------------------------------Limit  (cost=0.02..0.11 rows=5 width=4)  InitPlan    ->
Result (cost=0.00..0.02 rows=1 width=0)  ->  Seq Scan on x  (cost=0.00..64.80 rows=3480 width=4)
 
(4 rows)


--  Gregory Stark EnterpriseDB          http://www.enterprisedb.com Ask me about EnterpriseDB's RemoteDBA services!


Gregory Stark <stark@enterprisedb.com> writes:
> Hm, shouldn't this query notice that random() is volatile and not make the
> subquery an initplan?

We've never done that in the past; in fact I recall seeing people using
subselects deliberately to hide volatility.
        regards, tom lane