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


Reply via email to