@@ -36,22 +36,22 @@ BEGIN
36
36
END;
37
37
$$ LANGUAGE PLPGSQL;
38
38
-- Trivial foreign scan.
39
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
39
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
40
40
SELECT x FROM frgn;
41
- QUERY PLAN
42
- ----------------------------------------------
43
- Foreign Scan on frgn (actual rows=1 loops=1)
41
+ QUERY PLAN
42
+ -------------------------------------------------
43
+ Foreign Scan on frgn (actual rows=1.00 loops=1)
44
44
AQO not used
45
45
Using aqo: true
46
46
AQO mode: LEARN
47
47
JOINS: 0
48
48
(5 rows)
49
49
50
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
50
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
51
51
SELECT x FROM frgn;
52
- QUERY PLAN
53
- ----------------------------------------------
54
- Foreign Scan on frgn (actual rows=1 loops=1)
52
+ QUERY PLAN
53
+ -------------------------------------------------
54
+ Foreign Scan on frgn (actual rows=1.00 loops=1)
55
55
AQO: rows=1, error=0%
56
56
Using aqo: true
57
57
AQO mode: LEARN
@@ -65,7 +65,7 @@ SELECT str FROM expln('
65
65
') AS str;
66
66
str
67
67
-----------------------------------------------------------
68
- Foreign Scan on public.frgn (actual rows=1 loops=1)
68
+ Foreign Scan on public.frgn (actual rows=1.00 loops=1)
69
69
AQO not used
70
70
Output: x
71
71
Remote SQL: SELECT x FROM public.local WHERE ((x < 10))
@@ -80,7 +80,7 @@ SELECT str FROM expln('
80
80
') AS str;
81
81
str
82
82
-----------------------------------------------------------
83
- Foreign Scan on public.frgn (actual rows=1 loops=1)
83
+ Foreign Scan on public.frgn (actual rows=1.00 loops=1)
84
84
AQO: rows=1, error=0%
85
85
Output: x
86
86
Remote SQL: SELECT x FROM public.local WHERE ((x < 10))
@@ -89,11 +89,11 @@ SELECT str FROM expln('
89
89
JOINS: 0
90
90
(7 rows)
91
91
92
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
92
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
93
93
SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
94
- QUERY PLAN
95
- ----------------------------------------------
96
- Foreign Scan on frgn (actual rows=0 loops=1)
94
+ QUERY PLAN
95
+ -------------------------------------------------
96
+ Foreign Scan on frgn (actual rows=0.00 loops=1)
97
97
AQO: rows=1, error=100%
98
98
Using aqo: true
99
99
AQO mode: LEARN
@@ -102,21 +102,21 @@ SELECT x FROM frgn WHERE x < -10; -- AQO ignores constants
102
102
103
103
-- Trivial JOIN push-down.
104
104
SELECT str FROM expln('
105
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
105
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
106
106
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
107
107
') AS str WHERE str NOT LIKE '%Sort Method%';
108
- str
109
- ------------------------------------------------------------
110
- Merge Join (actual rows=1 loops=1)
108
+ str
109
+ ---------------------------------------------------------------
110
+ Merge Join (actual rows=1.00 loops=1)
111
111
AQO not used
112
112
Merge Cond: (a.x = b.x)
113
- -> Sort (actual rows=1 loops=1)
113
+ -> Sort (actual rows=1.00 loops=1)
114
114
Sort Key: a.x
115
- -> Foreign Scan on frgn a (actual rows=1 loops=1)
115
+ -> Foreign Scan on frgn a (actual rows=1.00 loops=1)
116
116
AQO not used
117
- -> Sort (actual rows=1 loops=1)
117
+ -> Sort (actual rows=1.00 loops=1)
118
118
Sort Key: b.x
119
- -> Foreign Scan on frgn b (actual rows=1 loops=1)
119
+ -> Foreign Scan on frgn b (actual rows=1.00 loops=1)
120
120
AQO not used
121
121
Using aqo: true
122
122
AQO mode: LEARN
@@ -125,12 +125,12 @@ SELECT str FROM expln('
125
125
126
126
-- Should learn on postgres_fdw nodes
127
127
SELECT str FROM expln('
128
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
128
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE, BUFFERS OFF )
129
129
SELECT * FROM frgn AS a, frgn AS b WHERE a.x=b.x;
130
130
') AS str;
131
131
str
132
132
--------------------------------------------------------------------------------------------------------
133
- Foreign Scan (actual rows=1 loops=1)
133
+ Foreign Scan (actual rows=1.00 loops=1)
134
134
AQO: rows=1, error=0%
135
135
Output: a.x, b.x
136
136
Relations: (public.frgn a) INNER JOIN (public.frgn b)
@@ -147,25 +147,25 @@ INSERT INTO local_b SELECT i, mod((i+random()*10)::numeric, 10) + 1, 'val_' || i
147
147
ANALYZE local_a, local_b;
148
148
CREATE FOREIGN TABLE frgn_a(aid int, aval text) SERVER loopback OPTIONS (table_name 'local_a');
149
149
CREATE FOREIGN TABLE frgn_b(bid int, aid int, bval text) SERVER loopback OPTIONS (table_name 'local_b');
150
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
150
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
151
151
SELECT * from frgn_a AS a, frgn_b AS b
152
152
WHERE a.aid = b.aid AND b.bval like 'val%';
153
153
QUERY PLAN
154
154
-----------------------------------------------
155
- Foreign Scan (actual rows=1000 loops=1)
155
+ Foreign Scan (actual rows=1000.00 loops=1)
156
156
AQO not used
157
157
Relations: (frgn_a a) INNER JOIN (frgn_b b)
158
158
Using aqo: true
159
159
AQO mode: LEARN
160
160
JOINS: 0
161
161
(6 rows)
162
162
163
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
163
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
164
164
SELECT * from frgn_a AS a, frgn_b AS b
165
165
WHERE a.aid = b.aid AND b.bval like 'val%';
166
166
QUERY PLAN
167
167
-----------------------------------------------
168
- Foreign Scan (actual rows=1000 loops=1)
168
+ Foreign Scan (actual rows=1000.00 loops=1)
169
169
AQO: rows=1000, error=0%
170
170
Relations: (frgn_a a) INNER JOIN (frgn_b b)
171
171
Using aqo: true
@@ -198,28 +198,28 @@ ANALYZE local_main_p0, local_main_p1, main_p2;
198
198
ANALYZE local_ref_p0, local_ref_p1, ref_p2;
199
199
SELECT str AS result
200
200
FROM expln('
201
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
201
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
202
202
SELECT * from main AS a, ref AS b
203
203
WHERE a.aid = b.aid AND b.bval like ''val%''') AS str
204
204
WHERE str NOT LIKE '%Memory%';
205
- result
206
- --------------------------------------------------------------------
207
- Append (actual rows=1000 loops=1)
205
+ result
206
+ -----------------------------------------------------------------------
207
+ Append (actual rows=1000.00 loops=1)
208
208
AQO not used
209
- -> Foreign Scan (actual rows=400 loops=1)
209
+ -> Foreign Scan (actual rows=400.00 loops=1)
210
210
AQO not used
211
211
Relations: (main_p0 a_1) INNER JOIN (ref_p0 b_1)
212
- -> Foreign Scan (actual rows=300 loops=1)
212
+ -> Foreign Scan (actual rows=300.00 loops=1)
213
213
AQO not used
214
214
Relations: (main_p1 a_2) INNER JOIN (ref_p1 b_2)
215
- -> Hash Join (actual rows=300 loops=1)
215
+ -> Hash Join (actual rows=300.00 loops=1)
216
216
AQO not used
217
217
Hash Cond: (b_3.aid = a_3.aid)
218
- -> Seq Scan on ref_p2 b_3 (actual rows=300 loops=1)
218
+ -> Seq Scan on ref_p2 b_3 (actual rows=300.00 loops=1)
219
219
AQO not used
220
220
Filter: (bval ~~ 'val%'::text)
221
- -> Hash (actual rows=38 loops=1)
222
- -> Seq Scan on main_p2 a_3 (actual rows=38 loops=1)
221
+ -> Hash (actual rows=38.00 loops=1)
222
+ -> Seq Scan on main_p2 a_3 (actual rows=38.00 loops=1)
223
223
AQO not used
224
224
Using aqo: true
225
225
AQO mode: LEARN
@@ -228,28 +228,28 @@ WHERE str NOT LIKE '%Memory%';
228
228
229
229
SELECT str AS result
230
230
FROM expln('
231
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
231
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
232
232
SELECT * from main AS a, ref AS b
233
233
WHERE a.aid = b.aid AND b.bval like ''val%''') AS str
234
234
WHERE str NOT LIKE '%Memory%';
235
- result
236
- --------------------------------------------------------------------
237
- Append (actual rows=1000 loops=1)
235
+ result
236
+ -----------------------------------------------------------------------
237
+ Append (actual rows=1000.00 loops=1)
238
238
AQO not used
239
- -> Foreign Scan (actual rows=400 loops=1)
239
+ -> Foreign Scan (actual rows=400.00 loops=1)
240
240
AQO: rows=400, error=0%
241
241
Relations: (main_p0 a_1) INNER JOIN (ref_p0 b_1)
242
- -> Foreign Scan (actual rows=300 loops=1)
242
+ -> Foreign Scan (actual rows=300.00 loops=1)
243
243
AQO: rows=300, error=0%
244
244
Relations: (main_p1 a_2) INNER JOIN (ref_p1 b_2)
245
- -> Hash Join (actual rows=300 loops=1)
245
+ -> Hash Join (actual rows=300.00 loops=1)
246
246
AQO: rows=300, error=0%
247
247
Hash Cond: (b_3.aid = a_3.aid)
248
- -> Seq Scan on ref_p2 b_3 (actual rows=300 loops=1)
248
+ -> Seq Scan on ref_p2 b_3 (actual rows=300.00 loops=1)
249
249
AQO: rows=300, error=0%
250
250
Filter: (bval ~~ 'val%'::text)
251
- -> Hash (actual rows=38 loops=1)
252
- -> Seq Scan on main_p2 a_3 (actual rows=38 loops=1)
251
+ -> Hash (actual rows=38.00 loops=1)
252
+ -> Seq Scan on main_p2 a_3 (actual rows=38.00 loops=1)
253
253
AQO: rows=38, error=0%
254
254
Using aqo: true
255
255
AQO mode: LEARN
@@ -261,25 +261,33 @@ DROP TABLE ref, local_ref_p0, local_ref_p1;
261
261
ALTER SERVER loopback OPTIONS (DROP fdw_tuple_cost);
262
262
reset enable_partitionwise_join;
263
263
-- TODO: Non-mergejoinable join condition.
264
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF)
264
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, BUFFERS OFF )
265
265
SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
266
- QUERY PLAN
267
- -------------------------------------------
268
- Foreign Scan (actual rows=0 loops=1)
266
+ QUERY PLAN
267
+ ---------------------------------------------------------------
268
+ Nested Loop (actual rows=0.00 loops=1)
269
269
AQO not used
270
- Relations: (frgn a) INNER JOIN (frgn b)
270
+ Join Filter: (a.x < b.x)
271
+ Rows Removed by Join Filter: 1
272
+ -> Foreign Scan on frgn a (actual rows=1.00 loops=1)
273
+ AQO not used
274
+ -> Materialize (actual rows=1.00 loops=1)
275
+ AQO not used
276
+ Storage: Memory Maximum Storage: 17kB
277
+ -> Foreign Scan on frgn b (actual rows=1.00 loops=1)
278
+ AQO not used
271
279
Using aqo: true
272
280
AQO mode: LEARN
273
281
JOINS: 0
274
- (6 rows)
282
+ (14 rows)
275
283
276
284
SELECT str FROM expln('
277
- EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE)
285
+ EXPLAIN (ANALYZE, COSTS OFF, SUMMARY OFF, TIMING OFF, VERBOSE, BUFFERS OFF )
278
286
SELECT * FROM frgn AS a, frgn AS b WHERE a.x<b.x;
279
287
') AS str;
280
288
str
281
289
--------------------------------------------------------------------------------------------------------
282
- Foreign Scan (actual rows=0 loops=1)
290
+ Foreign Scan (actual rows=0.00 loops=1)
283
291
AQO: rows=1, error=100%
284
292
Output: a.x, b.x
285
293
Relations: (public.frgn a) INNER JOIN (public.frgn b)
0 commit comments