@@ -10221,6 +10221,31 @@ SELECT * FROM result_tbl ORDER BY a;
10221
10221
2505 | 505 | 0505
10222
10222
(2 rows)
10223
10223
10224
+ DELETE FROM result_tbl;
10225
+ EXPLAIN (VERBOSE, COSTS OFF)
10226
+ INSERT INTO result_tbl SELECT a, b, 'AAA' || c FROM async_pt WHERE b === 505;
10227
+ QUERY PLAN
10228
+ ---------------------------------------------------------------------------------
10229
+ Insert on public.result_tbl
10230
+ -> Append
10231
+ -> Async Foreign Scan on public.async_p1 async_pt_1
10232
+ Output: async_pt_1.a, async_pt_1.b, ('AAA'::text || async_pt_1.c)
10233
+ Filter: (async_pt_1.b === 505)
10234
+ Remote SQL: SELECT a, b, c FROM public.base_tbl1
10235
+ -> Async Foreign Scan on public.async_p2 async_pt_2
10236
+ Output: async_pt_2.a, async_pt_2.b, ('AAA'::text || async_pt_2.c)
10237
+ Filter: (async_pt_2.b === 505)
10238
+ Remote SQL: SELECT a, b, c FROM public.base_tbl2
10239
+ (10 rows)
10240
+
10241
+ INSERT INTO result_tbl SELECT a, b, 'AAA' || c FROM async_pt WHERE b === 505;
10242
+ SELECT * FROM result_tbl ORDER BY a;
10243
+ a | b | c
10244
+ ------+-----+---------
10245
+ 1505 | 505 | AAA0505
10246
+ 2505 | 505 | AAA0505
10247
+ (2 rows)
10248
+
10224
10249
DELETE FROM result_tbl;
10225
10250
-- Check case where multiple partitions use the same connection
10226
10251
CREATE TABLE base_tbl3 (a int, b int, c text);
@@ -10358,6 +10383,69 @@ SELECT * FROM join_tbl ORDER BY a1;
10358
10383
3900 | 900 | 0900 | 3900 | 900 | 0900
10359
10384
(30 rows)
10360
10385
10386
+ DELETE FROM join_tbl;
10387
+ EXPLAIN (VERBOSE, COSTS OFF)
10388
+ INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;
10389
+ QUERY PLAN
10390
+ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10391
+ Insert on public.join_tbl
10392
+ -> Append
10393
+ -> Async Foreign Scan
10394
+ Output: t1_1.a, t1_1.b, ('AAA'::text || t1_1.c), t2_1.a, t2_1.b, ('AAA'::text || t2_1.c)
10395
+ Relations: (public.async_p1 t1_1) INNER JOIN (public.async_p1 t2_1)
10396
+ Remote SQL: SELECT r5.a, r5.b, r5.c, r8.a, r8.b, r8.c FROM (public.base_tbl1 r5 INNER JOIN public.base_tbl1 r8 ON (((r5.a = r8.a)) AND ((r5.b = r8.b)) AND (((r5.b % 100) = 0))))
10397
+ -> Async Foreign Scan
10398
+ Output: t1_2.a, t1_2.b, ('AAA'::text || t1_2.c), t2_2.a, t2_2.b, ('AAA'::text || t2_2.c)
10399
+ Relations: (public.async_p2 t1_2) INNER JOIN (public.async_p2 t2_2)
10400
+ Remote SQL: SELECT r6.a, r6.b, r6.c, r9.a, r9.b, r9.c FROM (public.base_tbl2 r6 INNER JOIN public.base_tbl2 r9 ON (((r6.a = r9.a)) AND ((r6.b = r9.b)) AND (((r6.b % 100) = 0))))
10401
+ -> Hash Join
10402
+ Output: t1_3.a, t1_3.b, ('AAA'::text || t1_3.c), t2_3.a, t2_3.b, ('AAA'::text || t2_3.c)
10403
+ Hash Cond: ((t2_3.a = t1_3.a) AND (t2_3.b = t1_3.b))
10404
+ -> Seq Scan on public.async_p3 t2_3
10405
+ Output: t2_3.a, t2_3.b, t2_3.c
10406
+ -> Hash
10407
+ Output: t1_3.a, t1_3.b, t1_3.c
10408
+ -> Seq Scan on public.async_p3 t1_3
10409
+ Output: t1_3.a, t1_3.b, t1_3.c
10410
+ Filter: ((t1_3.b % 100) = 0)
10411
+ (20 rows)
10412
+
10413
+ INSERT INTO join_tbl SELECT t1.a, t1.b, 'AAA' || t1.c, t2.a, t2.b, 'AAA' || t2.c FROM async_pt t1, async_pt t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.b % 100 = 0;
10414
+ SELECT * FROM join_tbl ORDER BY a1;
10415
+ a1 | b1 | c1 | a2 | b2 | c2
10416
+ ------+-----+---------+------+-----+---------
10417
+ 1000 | 0 | AAA0000 | 1000 | 0 | AAA0000
10418
+ 1100 | 100 | AAA0100 | 1100 | 100 | AAA0100
10419
+ 1200 | 200 | AAA0200 | 1200 | 200 | AAA0200
10420
+ 1300 | 300 | AAA0300 | 1300 | 300 | AAA0300
10421
+ 1400 | 400 | AAA0400 | 1400 | 400 | AAA0400
10422
+ 1500 | 500 | AAA0500 | 1500 | 500 | AAA0500
10423
+ 1600 | 600 | AAA0600 | 1600 | 600 | AAA0600
10424
+ 1700 | 700 | AAA0700 | 1700 | 700 | AAA0700
10425
+ 1800 | 800 | AAA0800 | 1800 | 800 | AAA0800
10426
+ 1900 | 900 | AAA0900 | 1900 | 900 | AAA0900
10427
+ 2000 | 0 | AAA0000 | 2000 | 0 | AAA0000
10428
+ 2100 | 100 | AAA0100 | 2100 | 100 | AAA0100
10429
+ 2200 | 200 | AAA0200 | 2200 | 200 | AAA0200
10430
+ 2300 | 300 | AAA0300 | 2300 | 300 | AAA0300
10431
+ 2400 | 400 | AAA0400 | 2400 | 400 | AAA0400
10432
+ 2500 | 500 | AAA0500 | 2500 | 500 | AAA0500
10433
+ 2600 | 600 | AAA0600 | 2600 | 600 | AAA0600
10434
+ 2700 | 700 | AAA0700 | 2700 | 700 | AAA0700
10435
+ 2800 | 800 | AAA0800 | 2800 | 800 | AAA0800
10436
+ 2900 | 900 | AAA0900 | 2900 | 900 | AAA0900
10437
+ 3000 | 0 | AAA0000 | 3000 | 0 | AAA0000
10438
+ 3100 | 100 | AAA0100 | 3100 | 100 | AAA0100
10439
+ 3200 | 200 | AAA0200 | 3200 | 200 | AAA0200
10440
+ 3300 | 300 | AAA0300 | 3300 | 300 | AAA0300
10441
+ 3400 | 400 | AAA0400 | 3400 | 400 | AAA0400
10442
+ 3500 | 500 | AAA0500 | 3500 | 500 | AAA0500
10443
+ 3600 | 600 | AAA0600 | 3600 | 600 | AAA0600
10444
+ 3700 | 700 | AAA0700 | 3700 | 700 | AAA0700
10445
+ 3800 | 800 | AAA0800 | 3800 | 800 | AAA0800
10446
+ 3900 | 900 | AAA0900 | 3900 | 900 | AAA0900
10447
+ (30 rows)
10448
+
10361
10449
DELETE FROM join_tbl;
10362
10450
RESET enable_partitionwise_join;
10363
10451
-- Test rescan of an async Append node with do_exec_prune=false
@@ -10536,6 +10624,88 @@ DROP TABLE local_tbl;
10536
10624
DROP INDEX base_tbl1_idx;
10537
10625
DROP INDEX base_tbl2_idx;
10538
10626
DROP INDEX async_p3_idx;
10627
+ -- UNION queries
10628
+ EXPLAIN (VERBOSE, COSTS OFF)
10629
+ INSERT INTO result_tbl
10630
+ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)
10631
+ UNION
10632
+ (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);
10633
+ QUERY PLAN
10634
+ -----------------------------------------------------------------------------------------------------------------
10635
+ Insert on public.result_tbl
10636
+ -> HashAggregate
10637
+ Output: async_p1.a, async_p1.b, (('AAA'::text || async_p1.c))
10638
+ Group Key: async_p1.a, async_p1.b, (('AAA'::text || async_p1.c))
10639
+ -> Append
10640
+ -> Async Foreign Scan on public.async_p1
10641
+ Output: async_p1.a, async_p1.b, ('AAA'::text || async_p1.c)
10642
+ Remote SQL: SELECT a, b, c FROM public.base_tbl1 ORDER BY a ASC NULLS LAST LIMIT 10::bigint
10643
+ -> Async Foreign Scan on public.async_p2
10644
+ Output: async_p2.a, async_p2.b, ('AAA'::text || async_p2.c)
10645
+ Remote SQL: SELECT a, b, c FROM public.base_tbl2 WHERE ((b < 10))
10646
+ (11 rows)
10647
+
10648
+ INSERT INTO result_tbl
10649
+ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)
10650
+ UNION
10651
+ (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);
10652
+ SELECT * FROM result_tbl ORDER BY a;
10653
+ a | b | c
10654
+ ------+----+---------
10655
+ 1000 | 0 | AAA0000
10656
+ 1005 | 5 | AAA0005
10657
+ 1010 | 10 | AAA0010
10658
+ 1015 | 15 | AAA0015
10659
+ 1020 | 20 | AAA0020
10660
+ 1025 | 25 | AAA0025
10661
+ 1030 | 30 | AAA0030
10662
+ 1035 | 35 | AAA0035
10663
+ 1040 | 40 | AAA0040
10664
+ 1045 | 45 | AAA0045
10665
+ 2000 | 0 | AAA0000
10666
+ 2005 | 5 | AAA0005
10667
+ (12 rows)
10668
+
10669
+ DELETE FROM result_tbl;
10670
+ EXPLAIN (VERBOSE, COSTS OFF)
10671
+ INSERT INTO result_tbl
10672
+ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)
10673
+ UNION ALL
10674
+ (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);
10675
+ QUERY PLAN
10676
+ -----------------------------------------------------------------------------------------------------------
10677
+ Insert on public.result_tbl
10678
+ -> Append
10679
+ -> Async Foreign Scan on public.async_p1
10680
+ Output: async_p1.a, async_p1.b, ('AAA'::text || async_p1.c)
10681
+ Remote SQL: SELECT a, b, c FROM public.base_tbl1 ORDER BY a ASC NULLS LAST LIMIT 10::bigint
10682
+ -> Async Foreign Scan on public.async_p2
10683
+ Output: async_p2.a, async_p2.b, ('AAA'::text || async_p2.c)
10684
+ Remote SQL: SELECT a, b, c FROM public.base_tbl2 WHERE ((b < 10))
10685
+ (8 rows)
10686
+
10687
+ INSERT INTO result_tbl
10688
+ (SELECT a, b, 'AAA' || c FROM async_p1 ORDER BY a LIMIT 10)
10689
+ UNION ALL
10690
+ (SELECT a, b, 'AAA' || c FROM async_p2 WHERE b < 10);
10691
+ SELECT * FROM result_tbl ORDER BY a;
10692
+ a | b | c
10693
+ ------+----+---------
10694
+ 1000 | 0 | AAA0000
10695
+ 1005 | 5 | AAA0005
10696
+ 1010 | 10 | AAA0010
10697
+ 1015 | 15 | AAA0015
10698
+ 1020 | 20 | AAA0020
10699
+ 1025 | 25 | AAA0025
10700
+ 1030 | 30 | AAA0030
10701
+ 1035 | 35 | AAA0035
10702
+ 1040 | 40 | AAA0040
10703
+ 1045 | 45 | AAA0045
10704
+ 2000 | 0 | AAA0000
10705
+ 2005 | 5 | AAA0005
10706
+ (12 rows)
10707
+
10708
+ DELETE FROM result_tbl;
10539
10709
-- Test that pending requests are processed properly
10540
10710
SET enable_mergejoin TO false;
10541
10711
SET enable_hashjoin TO false;
0 commit comments