On Mon, Jun 15, 2020 at 10:29:41PM +0900, Michael Paquier wrote:
Hi all,Attempting to run installcheck with 13~ and a value of work_mem lower than the default causes two failures, both related to incremental sorts (here work_mem = 1MB): 1) Test incremental_sort: @@ -4,12 +4,13 @@ select * from (select * from tenk1 order by four) t order by four, ten; QUERY PLAN ----------------------------------- - Sort + Incremental Sort Sort Key: tenk1.four, tenk1.ten + Presorted Key: tenk1.four -> Sort Sort Key: tenk1.four -> Seq Scan on tenk1 -(5 rows) +(6 rows) 2) Test join: @@ -2368,12 +2368,13 @@ -> Merge Left Join Merge Cond: (x.thousand = y.unique2) Join Filter: ((x.twothousand = y.hundred) AND (x.fivethous = y.unique2)) - -> Sort + -> Incremental Sort Sort Key: x.thousand, x.twothousand, x.fivethous - -> Seq Scan on tenk1 x + Presorted Key: x.thousand + -> Index Scan using tenk1_thous_tenthous on tenk1 x -> Materialize -> Index Scan using tenk1_unique2 on tenk1 y -(9 rows) +(10 rows) There are of course regression failures when changing the relation page size or such, but we should have tests more portable when it comes to work_mem (this issue does not exist in ~12) or people running installcheck on a new instance would be surprised. Please note that I have not looked at the problem in details, but a simple solution would be to enforce work_mem in those code paths to keep the two plans stable.
I don't think the tests can be made not to depend on work_mem, because it costing of sort / incremental sort depends on the value. I agree setting the work_mem at the beginning of the test script is the right solution. regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
