Обсуждение: 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?

От
Gregory Stark
Дата:
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?

От
Tom Lane
Дата:
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