Subselects in select expressions

Поиск
Список
Период
Сортировка
От Royce Ausburn
Тема Subselects in select expressions
Дата
Msg-id 20AA4331-3EFF-437A-A787-45E49F33CE96@inomial.com
обсуждение исходный текст
Ответы Re: Subselects in select expressions  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
I'm having trouble understanding why these two queries produce different results:

test=# select (select random()) from generate_series(1,10); -- rows are the same
     ?column?      
-------------------
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
 0.770797704812139
(10 rows)

test=# select (select random() where generate_series is not null) from generate_series(1,10); -- rows are different
      ?column?      
--------------------
  0.561828337144107
 0.0275383000262082
  0.290950470604002
  0.281174722127616
  0.530742571223527
  0.617655908688903
  0.169655770529062
  0.428002137690783
  0.442224354483187
  0.203044794034213
(10 rows)

I understand that it's likely an optimisation thing -- postgres knows that the subselect doesn't depend on the FROM rows so it evaluates it only once, but is this really correct behaviour?  Ideally, shouldn't postgres know that each invocation of random() produces different results and so decide that it should execute it for each row? If not, why?

Thanks!

--Royce

В списке pgsql-general по дате отправления:

Предыдущее
От: Debasis Mishra
Дата:
Сообщение: Re: Regarding the shared disk fail over cluster configuration
Следующее
От: Eric Smith
Дата:
Сообщение: Re: adding a column takes FOREVER!