diff -U3 /tmp/cirrus-ci-build/contrib/pg_plan_advice/expected/join_order.out /tmp/cirrus-ci-build/contrib/pg_plan_advice/results/join_order.out --- /tmp/cirrus-ci-build/contrib/pg_plan_advice/expected/join_order.out 2026-03-01 20:33:07.166593484 +0000 +++ /tmp/cirrus-ci-build/contrib/pg_plan_advice/results/join_order.out 2026-03-01 20:38:34.726766929 +0000 @@ -140,15 +140,12 @@ LEFT JOIN jo_dim1 d1 ON f.dim1_id = d1.id LEFT JOIN jo_dim2 d2 ON f.dim2_id = d2.id WHERE val1 = 1 AND val2 = 1; - QUERY PLAN -------------------------------------------------------------- - Merge Join - Merge Cond: ((f.dim2_id = d2.id) AND (f.dim1_id = d1.id)) - -> Sort - Sort Key: f.dim2_id, f.dim1_id - -> Seq Scan on jo_fact f - -> Sort - Sort Key: d2.id, d1.id + QUERY PLAN +------------------------------------------------------------ + Hash Join + Hash Cond: ((f.dim1_id = d1.id) AND (f.dim2_id = d2.id)) + -> Seq Scan on jo_fact f + -> Hash -> Nested Loop -> Seq Scan on jo_dim1 d1 Filter: (val1 = 1) @@ -159,11 +156,11 @@ JOIN_ORDER(f (d1 d2)) /* matched */ Generated Plan Advice: JOIN_ORDER(f (d1 d2)) - MERGE_JOIN_PLAIN((d1 d2)) NESTED_LOOP_MATERIALIZE(d2) + HASH_JOIN((d1 d2)) SEQ_SCAN(f d1 d2) NO_GATHER(f d1 d2) -(21 rows) +(18 rows) SET LOCAL pg_plan_advice.advice = 'join_order(f {d1 d2})'; EXPLAIN (COSTS OFF, PLAN_ADVICE) @@ -171,15 +168,12 @@ LEFT JOIN jo_dim1 d1 ON f.dim1_id = d1.id LEFT JOIN jo_dim2 d2 ON f.dim2_id = d2.id WHERE val1 = 1 AND val2 = 1; - QUERY PLAN -------------------------------------------------------------- - Merge Join - Merge Cond: ((f.dim2_id = d2.id) AND (f.dim1_id = d1.id)) - -> Sort - Sort Key: f.dim2_id, f.dim1_id - -> Seq Scan on jo_fact f - -> Sort - Sort Key: d2.id, d1.id + QUERY PLAN +------------------------------------------------------------ + Hash Join + Hash Cond: ((f.dim1_id = d1.id) AND (f.dim2_id = d2.id)) + -> Seq Scan on jo_fact f + -> Hash -> Nested Loop -> Seq Scan on jo_dim2 d2 Filter: (val2 = 1) @@ -190,11 +184,11 @@ JOIN_ORDER(f {d1 d2}) /* matched, failed */ Generated Plan Advice: JOIN_ORDER(f (d2 d1)) - MERGE_JOIN_PLAIN((d1 d2)) NESTED_LOOP_MATERIALIZE(d1) + HASH_JOIN((d1 d2)) SEQ_SCAN(f d2 d1) NO_GATHER(f d1 d2) -(21 rows) +(18 rows) COMMIT; -- Force a join order by mentioning just a prefix of the join list.