Thread: Volatile functions in subqueries don't prevent subqueries from being evaluated in initplans?
Volatile functions in subqueries don't prevent subqueries from being evaluated in initplans?
From
Gregory Stark
Date:
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!
Re: Volatile functions in subqueries don't prevent subqueries from being evaluated in initplans?
From
Tom Lane
Date:
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