Result
InitPlan 1 (returns $0)
-> Limit
- -> Remote Subquery Scan on all
+ -> Remote Subquery Scan on all (datanode_1,datanode_2)
-> Limit
-> Index Only Scan Backward using tenk1_unique1 on tenk1
Index Cond: ((unique1 IS NOT NULL) AND (unique1 > 42000))
-- interesting corner case: constant gets optimized into a seqscan
explain (costs off)
select max(100) from tenk1;
- QUERY PLAN
-----------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------
Result
InitPlan 1 (returns $0)
-> Limit
- -> Result
- One-Time Filter: (100 IS NOT NULL)
- -> Seq Scan on tenk1
-(6 rows)
+ -> Remote Subquery Scan on all (datanode_1,datanode_2)
+ -> Limit
+ -> Result
+ One-Time Filter: (100 IS NOT NULL)
+ -> Seq Scan on tenk1
+(8 rows)
select max(100) from tenk1;
max
insert into minmaxtest3 values(17), (18);
explain (costs off, nodes off)
select min(f1), max(f1) from minmaxtest;
- QUERY PLAN
-----------------------------------------------------------------------------------------------
- Result
- InitPlan 1 (returns $0)
- -> Limit
- -> Merge Append
- Sort Key: minmaxtest.f1
- -> Index Only Scan using minmaxtesti on minmaxtest
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest1i on minmaxtest1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest2i on minmaxtest2
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest3i on minmaxtest3
- InitPlan 2 (returns $1)
- -> Limit
- -> Merge Append
- Sort Key: minmaxtest_1.f1 DESC
- -> Index Only Scan Backward using minmaxtesti on minmaxtest minmaxtest_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest1i on minmaxtest1 minmaxtest1_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest2i on minmaxtest2 minmaxtest2_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest3i on minmaxtest3 minmaxtest3_1
-(23 rows)
+ QUERY PLAN
+-------------------------------------------------
+ Finalize Aggregate
+ -> Remote Subquery Scan on all
+ -> Partial Aggregate
+ -> Append
+ -> Seq Scan on minmaxtest
+ -> Seq Scan on minmaxtest1
+ -> Seq Scan on minmaxtest2
+ -> Seq Scan on minmaxtest3
+(8 rows)
select min(f1), max(f1) from minmaxtest;
min | max
-- DISTINCT doesn't do anything useful here, but it shouldn't fail
explain (costs off)
select distinct min(f1), max(f1) from minmaxtest;
- QUERY PLAN
-----------------------------------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Unique
- InitPlan 1 (returns $0)
- -> Limit
- -> Merge Append
- Sort Key: minmaxtest.f1
- -> Index Only Scan using minmaxtesti on minmaxtest
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest1i on minmaxtest1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest2i on minmaxtest2
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest3i on minmaxtest3
- InitPlan 2 (returns $1)
- -> Limit
- -> Merge Append
- Sort Key: minmaxtest_1.f1 DESC
- -> Index Only Scan Backward using minmaxtesti on minmaxtest minmaxtest_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest1i on minmaxtest1 minmaxtest1_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan using minmaxtest2i on minmaxtest2 minmaxtest2_1
- Index Cond: (f1 IS NOT NULL)
- -> Index Only Scan Backward using minmaxtest3i on minmaxtest3 minmaxtest3_1
-> Sort
- Sort Key: ($0), ($1)
- -> Result
-(26 rows)
+ Sort Key: (min(f1)), (max(f1))
+ -> Finalize Aggregate
+ -> Remote Subquery Scan on all (datanode_1,datanode_2)
+ -> Partial Aggregate
+ -> Append
+ -> Seq Scan on minmaxtest
+ -> Seq Scan on minmaxtest1
+ -> Seq Scan on minmaxtest2
+ -> Seq Scan on minmaxtest3
+(11 rows)
select distinct min(f1), max(f1) from minmaxtest;
min | max
(1 row)
DROP TABLE int8_tbl_aggtest;
-
-- test aggregates with common transition functions share the same states
begin work;
create type avg_state as (total bigint, count bigint);