Search Postgresql Archives

Subselects in select expressions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux