@@ -179,16 +179,27 @@ SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
179179EXPLAIN (COSTS OFF)
180180UPDATE rowmarks.second SET id = 2
181181WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
182- QUERY PLAN
183- --------------------------------------
182+ QUERY PLAN
183+ ---------------------------------------------
184184 Update on second
185185 -> Nested Loop Semi Join
186186 -> Seq Scan on second
187187 Filter: (id = 1)
188188 -> Materialize
189- -> Seq Scan on first
190- Filter: (id = 1)
191- (7 rows)
189+ -> Append
190+ -> Seq Scan on first
191+ Filter: (id = 1)
192+ -> Seq Scan on first_0
193+ Filter: (id = 1)
194+ -> Seq Scan on first_1
195+ Filter: (id = 1)
196+ -> Seq Scan on first_2
197+ Filter: (id = 1)
198+ -> Seq Scan on first_3
199+ Filter: (id = 1)
200+ -> Seq Scan on first_4
201+ Filter: (id = 1)
202+ (18 rows)
192203
193204EXPLAIN (COSTS OFF)
194205UPDATE rowmarks.second SET id = 2
@@ -200,67 +211,113 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
200211 Join Filter: (second.id = first.id)
201212 -> HashAggregate
202213 Group Key: first.id
203- -> Seq Scan on first
204- Filter: (id < 1)
214+ -> Append
215+ -> Seq Scan on first
216+ Filter: (id < 1)
217+ -> Seq Scan on first_0
218+ Filter: (id < 1)
219+ -> Seq Scan on first_1
220+ Filter: (id < 1)
221+ -> Seq Scan on first_2
222+ Filter: (id < 1)
223+ -> Seq Scan on first_3
224+ Filter: (id < 1)
225+ -> Seq Scan on first_4
226+ Filter: (id < 1)
205227 -> Materialize
206228 -> Seq Scan on second
207- (9 rows)
229+ (20 rows)
208230
209231EXPLAIN (COSTS OFF)
210232UPDATE rowmarks.second SET id = 2
211233WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
212- QUERY PLAN
213- ----------------------------------------------------
234+ QUERY PLAN
235+ ----------------------------------------------------------
214236 Update on second
215237 -> Nested Loop Semi Join
216238 Join Filter: (second.id = first.id)
217239 -> Seq Scan on second
218240 -> Materialize
219- -> Seq Scan on first
220- Filter: ((id = 1) OR (id = 2))
221- (7 rows)
241+ -> Append
242+ -> Seq Scan on first
243+ Filter: ((id = 1) OR (id = 2))
244+ -> Seq Scan on first_0
245+ Filter: ((id = 1) OR (id = 2))
246+ -> Seq Scan on first_1
247+ Filter: ((id = 1) OR (id = 2))
248+ -> Seq Scan on first_2
249+ Filter: ((id = 1) OR (id = 2))
250+ -> Seq Scan on first_3
251+ Filter: ((id = 1) OR (id = 2))
252+ -> Seq Scan on first_4
253+ Filter: ((id = 1) OR (id = 2))
254+ (18 rows)
222255
223256EXPLAIN (COSTS OFF)
224257UPDATE rowmarks.second SET id = 2
225258WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1)
226259RETURNING *, tableoid::regclass;
227- QUERY PLAN
228- --------------------------------------
260+ QUERY PLAN
261+ ---------------------------------------------
229262 Update on second
230263 -> Nested Loop Semi Join
231264 -> Seq Scan on second
232265 Filter: (id = 1)
233266 -> Materialize
234- -> Seq Scan on first
235- Filter: (id = 1)
236- (7 rows)
267+ -> Append
268+ -> Seq Scan on first
269+ Filter: (id = 1)
270+ -> Seq Scan on first_0
271+ Filter: (id = 1)
272+ -> Seq Scan on first_1
273+ Filter: (id = 1)
274+ -> Seq Scan on first_2
275+ Filter: (id = 1)
276+ -> Seq Scan on first_3
277+ Filter: (id = 1)
278+ -> Seq Scan on first_4
279+ Filter: (id = 1)
280+ (18 rows)
237281
238282SET enable_hashjoin = t;
239283SET enable_mergejoin = t;
240284/* Check updates (execution) */
241285UPDATE rowmarks.second SET id = 1
242286WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2)
243287RETURNING *, tableoid::regclass;
244- id | tableoid
245- ----+----------
246- (0 rows)
288+ id | tableoid
289+ ----+-----------------
290+ 1 | rowmarks.second
291+ 1 | rowmarks.second
292+ (2 rows)
247293
248294/* Check deletes (plan) */
249295SET enable_hashjoin = f; /* Hash Semi Join on 10 vs Hash Join on 9.6 */
250296SET enable_mergejoin = f; /* Merge Semi Join on 10 vs Merge Join on 9.6 */
251297EXPLAIN (COSTS OFF)
252298DELETE FROM rowmarks.second
253299WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1);
254- QUERY PLAN
255- --------------------------------------
300+ QUERY PLAN
301+ ---------------------------------------------
256302 Delete on second
257303 -> Nested Loop Semi Join
258304 -> Seq Scan on second
259305 Filter: (id = 1)
260306 -> Materialize
261- -> Seq Scan on first
262- Filter: (id = 1)
263- (7 rows)
307+ -> Append
308+ -> Seq Scan on first
309+ Filter: (id = 1)
310+ -> Seq Scan on first_0
311+ Filter: (id = 1)
312+ -> Seq Scan on first_1
313+ Filter: (id = 1)
314+ -> Seq Scan on first_2
315+ Filter: (id = 1)
316+ -> Seq Scan on first_3
317+ Filter: (id = 1)
318+ -> Seq Scan on first_4
319+ Filter: (id = 1)
320+ (18 rows)
264321
265322EXPLAIN (COSTS OFF)
266323DELETE FROM rowmarks.second
@@ -272,25 +329,47 @@ WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id < 1);
272329 Join Filter: (second.id = first.id)
273330 -> HashAggregate
274331 Group Key: first.id
275- -> Seq Scan on first
276- Filter: (id < 1)
332+ -> Append
333+ -> Seq Scan on first
334+ Filter: (id < 1)
335+ -> Seq Scan on first_0
336+ Filter: (id < 1)
337+ -> Seq Scan on first_1
338+ Filter: (id < 1)
339+ -> Seq Scan on first_2
340+ Filter: (id < 1)
341+ -> Seq Scan on first_3
342+ Filter: (id < 1)
343+ -> Seq Scan on first_4
344+ Filter: (id < 1)
277345 -> Materialize
278346 -> Seq Scan on second
279- (9 rows)
347+ (20 rows)
280348
281349EXPLAIN (COSTS OFF)
282350DELETE FROM rowmarks.second
283351WHERE rowmarks.second.id IN (SELECT id FROM rowmarks.first WHERE id = 1 OR id = 2);
284- QUERY PLAN
285- ----------------------------------------------------
352+ QUERY PLAN
353+ ----------------------------------------------------------
286354 Delete on second
287355 -> Nested Loop Semi Join
288356 Join Filter: (second.id = first.id)
289357 -> Seq Scan on second
290358 -> Materialize
291- -> Seq Scan on first
292- Filter: ((id = 1) OR (id = 2))
293- (7 rows)
359+ -> Append
360+ -> Seq Scan on first
361+ Filter: ((id = 1) OR (id = 2))
362+ -> Seq Scan on first_0
363+ Filter: ((id = 1) OR (id = 2))
364+ -> Seq Scan on first_1
365+ Filter: ((id = 1) OR (id = 2))
366+ -> Seq Scan on first_2
367+ Filter: ((id = 1) OR (id = 2))
368+ -> Seq Scan on first_3
369+ Filter: ((id = 1) OR (id = 2))
370+ -> Seq Scan on first_4
371+ Filter: ((id = 1) OR (id = 2))
372+ (18 rows)
294373
295374SET enable_hashjoin = t;
296375SET enable_mergejoin = t;
0 commit comments