@@ -1394,3 +1394,108 @@ SELECT y, sum(x), avg(x), count(*) FROM pagg_tab_para GROUP BY y HAVING avg(x) <
1394
1394
11 | 16500 | 11.0000000000000000 | 1500
1395
1395
(4 rows)
1396
1396
1397
+ -- Test when parent can produce parallel paths but not any (or some) of its children
1398
+ ALTER TABLE pagg_tab_para_p1 SET (parallel_workers = 0);
1399
+ ALTER TABLE pagg_tab_para_p3 SET (parallel_workers = 0);
1400
+ ANALYZE pagg_tab_para;
1401
+ EXPLAIN (COSTS OFF)
1402
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1403
+ QUERY PLAN
1404
+ --------------------------------------------------------------------------------------
1405
+ Sort
1406
+ Sort Key: pagg_tab_para_p1.x, (sum(pagg_tab_para_p1.y)), (avg(pagg_tab_para_p1.y))
1407
+ -> Finalize GroupAggregate
1408
+ Group Key: pagg_tab_para_p1.x
1409
+ Filter: (avg(pagg_tab_para_p1.y) < '7'::numeric)
1410
+ -> Gather Merge
1411
+ Workers Planned: 2
1412
+ -> Sort
1413
+ Sort Key: pagg_tab_para_p1.x
1414
+ -> Partial HashAggregate
1415
+ Group Key: pagg_tab_para_p1.x
1416
+ -> Parallel Append
1417
+ -> Seq Scan on pagg_tab_para_p1
1418
+ -> Seq Scan on pagg_tab_para_p3
1419
+ -> Parallel Seq Scan on pagg_tab_para_p2
1420
+ (15 rows)
1421
+
1422
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1423
+ x | sum | avg | count
1424
+ ----+------+--------------------+-------
1425
+ 0 | 5000 | 5.0000000000000000 | 1000
1426
+ 1 | 6000 | 6.0000000000000000 | 1000
1427
+ 10 | 5000 | 5.0000000000000000 | 1000
1428
+ 11 | 6000 | 6.0000000000000000 | 1000
1429
+ 20 | 5000 | 5.0000000000000000 | 1000
1430
+ 21 | 6000 | 6.0000000000000000 | 1000
1431
+ (6 rows)
1432
+
1433
+ ALTER TABLE pagg_tab_para_p2 SET (parallel_workers = 0);
1434
+ ANALYZE pagg_tab_para;
1435
+ EXPLAIN (COSTS OFF)
1436
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1437
+ QUERY PLAN
1438
+ --------------------------------------------------------------------------------------
1439
+ Sort
1440
+ Sort Key: pagg_tab_para_p1.x, (sum(pagg_tab_para_p1.y)), (avg(pagg_tab_para_p1.y))
1441
+ -> Finalize GroupAggregate
1442
+ Group Key: pagg_tab_para_p1.x
1443
+ Filter: (avg(pagg_tab_para_p1.y) < '7'::numeric)
1444
+ -> Gather Merge
1445
+ Workers Planned: 2
1446
+ -> Sort
1447
+ Sort Key: pagg_tab_para_p1.x
1448
+ -> Partial HashAggregate
1449
+ Group Key: pagg_tab_para_p1.x
1450
+ -> Parallel Append
1451
+ -> Seq Scan on pagg_tab_para_p1
1452
+ -> Seq Scan on pagg_tab_para_p2
1453
+ -> Seq Scan on pagg_tab_para_p3
1454
+ (15 rows)
1455
+
1456
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1457
+ x | sum | avg | count
1458
+ ----+------+--------------------+-------
1459
+ 0 | 5000 | 5.0000000000000000 | 1000
1460
+ 1 | 6000 | 6.0000000000000000 | 1000
1461
+ 10 | 5000 | 5.0000000000000000 | 1000
1462
+ 11 | 6000 | 6.0000000000000000 | 1000
1463
+ 20 | 5000 | 5.0000000000000000 | 1000
1464
+ 21 | 6000 | 6.0000000000000000 | 1000
1465
+ (6 rows)
1466
+
1467
+ -- Reset parallelism parameters to get partitionwise aggregation plan.
1468
+ RESET min_parallel_table_scan_size;
1469
+ RESET parallel_setup_cost;
1470
+ EXPLAIN (COSTS OFF)
1471
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1472
+ QUERY PLAN
1473
+ --------------------------------------------------------------------------------------
1474
+ Sort
1475
+ Sort Key: pagg_tab_para_p1.x, (sum(pagg_tab_para_p1.y)), (avg(pagg_tab_para_p1.y))
1476
+ -> Append
1477
+ -> HashAggregate
1478
+ Group Key: pagg_tab_para_p1.x
1479
+ Filter: (avg(pagg_tab_para_p1.y) < '7'::numeric)
1480
+ -> Seq Scan on pagg_tab_para_p1
1481
+ -> HashAggregate
1482
+ Group Key: pagg_tab_para_p2.x
1483
+ Filter: (avg(pagg_tab_para_p2.y) < '7'::numeric)
1484
+ -> Seq Scan on pagg_tab_para_p2
1485
+ -> HashAggregate
1486
+ Group Key: pagg_tab_para_p3.x
1487
+ Filter: (avg(pagg_tab_para_p3.y) < '7'::numeric)
1488
+ -> Seq Scan on pagg_tab_para_p3
1489
+ (15 rows)
1490
+
1491
+ SELECT x, sum(y), avg(y), count(*) FROM pagg_tab_para GROUP BY x HAVING avg(y) < 7 ORDER BY 1, 2, 3;
1492
+ x | sum | avg | count
1493
+ ----+------+--------------------+-------
1494
+ 0 | 5000 | 5.0000000000000000 | 1000
1495
+ 1 | 6000 | 6.0000000000000000 | 1000
1496
+ 10 | 5000 | 5.0000000000000000 | 1000
1497
+ 11 | 6000 | 6.0000000000000000 | 1000
1498
+ 20 | 5000 | 5.0000000000000000 | 1000
1499
+ 21 | 6000 | 6.0000000000000000 | 1000
1500
+ (6 rows)
1501
+
0 commit comments