-- exercise rescan code path via a repeatedly-evaluated subquery
explain (costs off)
SELECT
- (SELECT g.i FROM (
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ ARRAY(SELECT f.i FROM (
+ (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1)
UNION ALL
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1)
) f(i)
- ORDER BY f.i LIMIT 1)
+ ORDER BY f.i LIMIT 10)
FROM generate_series(1, 3) g(i);
- QUERY PLAN
-------------------------------------------------------------------------------------
+ QUERY PLAN
+----------------------------------------------------------------
Function Scan on generate_series g
SubPlan 1
-> Limit
- -> Result
- -> Merge Append
- Sort Key: generate_series.generate_series
- -> Sort
- Sort Key: generate_series.generate_series
- -> Function Scan on generate_series
- -> Sort
- Sort Key: generate_series_1.generate_series
- -> Function Scan on generate_series generate_series_1
-(12 rows)
+ -> Merge Append
+ Sort Key: ((d.d + g.i))
+ -> Sort
+ Sort Key: ((d.d + g.i))
+ -> Function Scan on generate_series d
+ -> Sort
+ Sort Key: ((d_1.d + g.i))
+ -> Function Scan on generate_series d_1
+(11 rows)
SELECT
- (SELECT g.i FROM (
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ ARRAY(SELECT f.i FROM (
+ (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1)
UNION ALL
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1)
) f(i)
- ORDER BY f.i LIMIT 1)
+ ORDER BY f.i LIMIT 10)
FROM generate_series(1, 3) g(i);
- i
----
- 1
- 2
- 3
+ array
+------------------------------
+ {1,5,6,8,11,11,14,16,17,20}
+ {2,6,7,9,12,12,15,17,18,21}
+ {3,7,8,10,13,13,16,18,19,22}
(3 rows)
reset enable_seqscan;
-- exercise rescan code path via a repeatedly-evaluated subquery
explain (costs off)
SELECT
- (SELECT g.i FROM (
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ ARRAY(SELECT f.i FROM (
+ (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1)
UNION ALL
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1)
) f(i)
- ORDER BY f.i LIMIT 1)
+ ORDER BY f.i LIMIT 10)
FROM generate_series(1, 3) g(i);
SELECT
- (SELECT g.i FROM (
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ ARRAY(SELECT f.i FROM (
+ (SELECT d + g.i FROM generate_series(4, 30, 3) d ORDER BY 1)
UNION ALL
- (SELECT * FROM generate_series(1, 2) ORDER BY 1)
+ (SELECT d + g.i FROM generate_series(0, 30, 5) d ORDER BY 1)
) f(i)
- ORDER BY f.i LIMIT 1)
+ ORDER BY f.i LIMIT 10)
FROM generate_series(1, 3) g(i);
reset enable_seqscan;