"Tom Lane" <[EMAIL PROTECTED]> writes:

> Gregory Stark <[EMAIL PROTECTED]> writes:
>> What does the executor do differently in the case of a subplan with a
>> parameter that makes it re-execute the plan from scratch and not just do a
>> simple rescan?
>
> Look at the chgParam signaling.  Since a Sort node itself has no
> parameters, it historically has only had to re-sort if its input node
> suffers a parameter change, which it checks in ExecReScanSort.  But now
> the bound effectively acts like a parameter, and has to force a
> recomputation.

Hm, that all makes sense now. But then there's something mysterious going on
still as the regression test I tried to write for this actually does work:

edb=# select (select 
ROW(int_array_aggregate(empno::integer),min(sal),round(avg(sal)),max(sal)) as 
sal from (select * from emp order by sal offset 3*bucket limit 3) as x) from 
generate_series(0,(select count(*) from emp)/3) as bucket;
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  switching to bounded heap sort at 7 tuples
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing unheapify of 3 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 17 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  switching to bounded heap sort at 13 tuples
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing unheapify of 6 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 17 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  begin tuple sort: nkeys = 1, workMem = 1024, randomAccess = f
LOG:  performsort starting: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  doing qsort of 14 tuples
LOG:  performsort done: CPU 0.00s/0.00u sec elapsed 0.00 sec
LOG:  internal sort ended, 18 KB used: CPU 0.00s/0.00u sec elapsed 0.00 sec
                 ?column?                  
-------------------------------------------
 ("{7369,7900,7876}",800.00,950,1100.00)
 ("{7654,7521,7934}",1250.00,1267,1300.00)
 ("{7844,7499,7782}",1500.00,1850,2450.00)
 ("{7698,7566,7902}",2850.00,2942,3000.00)
 ("{7788,7839}",3000.00,4000,5000.00)
(5 rows)

-- 
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com


---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

                http://www.postgresql.org/about/donate

Reply via email to