@@ -21,7 +21,9 @@ CREATE TABLE local (x int);
21
21
CREATE FOREIGN TABLE frgn(x int) SERVER loopback OPTIONS (table_name 'local');
22
22
INSERT INTO frgn (x) VALUES (1);
23
23
ANALYZE local;
24
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
24
+ -- Trivial foreign scan.s
25
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
26
+ SELECT x FROM frgn;
25
27
QUERY PLAN
26
28
-------------------------------------------------------------
27
29
Foreign Scan on frgn (actual rows=1 loops=1) (AQO not used)
@@ -30,7 +32,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
30
32
JOINS: 0
31
33
(4 rows)
32
34
33
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
35
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
36
+ SELECT x FROM frgn;
34
37
QUERY PLAN
35
38
-----------------------------------------------------------------------------
36
39
Foreign Scan on frgn (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
@@ -39,8 +42,9 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn;
39
42
JOINS: 0
40
43
(4 rows)
41
44
42
- -- Push down base filters.
43
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
45
+ -- Push down base filters. Use verbose mode to see filters.
46
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
47
+ SELECT x FROM frgn WHERE x < 10;
44
48
QUERY PLAN
45
49
--------------------------------------------------------------------
46
50
Foreign Scan on public.frgn (actual rows=1 loops=1) (AQO not used)
@@ -51,7 +55,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frg
51
55
JOINS: 0
52
56
(6 rows)
53
57
54
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frgn WHERE x < 10;
58
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
59
+ SELECT x FROM frgn WHERE x < 10;
55
60
QUERY PLAN
56
61
------------------------------------------------------------------------------------
57
62
Foreign Scan on public.frgn (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
@@ -62,7 +67,8 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE) SELECT x FROM frg
62
67
JOINS: 0
63
68
(6 rows)
64
69
65
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
70
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
71
+ SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
66
72
QUERY PLAN
67
73
-------------------------------------------------------------------------------
68
74
Foreign Scan on frgn (actual rows=0 loops=1) (AQO: cardinality=1, error=100%)
@@ -71,4 +77,40 @@ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF) SELECT x FROM frgn WHERE x
71
77
JOINS: 0
72
78
(4 rows)
73
79
80
+ -- Trivial JOIN push-down.
81
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
82
+ SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
83
+ QUERY PLAN
84
+ ---------------------------------------------------------------------------
85
+ Merge Join (actual rows=1 loops=1) (AQO not used)
86
+ Merge Cond: (a.x = b.x)
87
+ -> Sort (actual rows=1 loops=1) (AQO not used)
88
+ Sort Key: a.x
89
+ Sort Method: quicksort Memory: 25kB
90
+ -> Foreign Scan on frgn a (actual rows=1 loops=1) (AQO not used)
91
+ -> Sort (actual rows=1 loops=1) (AQO not used)
92
+ Sort Key: b.x
93
+ Sort Method: quicksort Memory: 25kB
94
+ -> Foreign Scan on frgn b (actual rows=1 loops=1) (AQO not used)
95
+ Using aqo: true
96
+ AQO mode: LEARN
97
+ JOINS: 0
98
+ (13 rows)
99
+
100
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
101
+ SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
102
+ QUERY PLAN
103
+ ---------------------------------------------------------------------
104
+ Foreign Scan (actual rows=1 loops=1) (AQO: cardinality=1, error=0%)
105
+ Relations: (frgn a) INNER JOIN (frgn b)
106
+ Using aqo: true
107
+ AQO mode: LEARN
108
+ JOINS: 0
109
+ (5 rows)
110
+
111
+ -- Non-mergejoinable join condition
112
+ --EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
113
+ --SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
114
+ --EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
115
+ --SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
74
116
DROP EXTENSION aqo;
0 commit comments