summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2015-06-10 13:27:34 +0000
committerPavan Deolasee2015-06-10 13:27:34 +0000
commitf6e2365a4a85b5c154dddbef09299467af3a7e5e (patch)
treed3e4cb6d947222575e6ea6e8e0e96f0e164ff6a4
parent4b65adcb9e666f524fb49efb3a0eb72805c08244 (diff)
Fix expected output for the testcase 'xc_groupby'
Most of the diffs were because of plan showing grouping key
-rw-r--r--src/test/regress/expected/xc_groupby.out430
-rw-r--r--src/test/regress/output/largeobject_3.source249
2 files changed, 506 insertions, 173 deletions
diff --git a/src/test/regress/expected/xc_groupby.out b/src/test/regress/expected/xc_groupby.out
index fb259d2502..136672acca 100644
--- a/src/test/regress/expected/xc_groupby.out
+++ b/src/test/regress/expected/xc_groupby.out
@@ -27,13 +27,15 @@ explain (verbose true, costs false, nodes false) select count(*), sum(val), avg(
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HashAggregate
Output: pg_catalog.count(*), pg_catalog.sum((sum(val))), pg_catalog.avg((avg(val))), ((pg_catalog.sum((sum(val))))::double precision / (pg_catalog.count(*))::double precision), val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: count(*), sum(val), avg(val), val2
-> HashAggregate
Output: count(*), sum(val), avg(val), val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(8 rows)
+(10 rows)
-- joins and group by
select count(*), sum(xc_groupby_tab1.val * xc_groupby_tab2.val), avg(xc_groupby_tab1.val*xc_groupby_tab2.val), sum(xc_groupby_tab1.val*xc_groupby_tab2.val)::float8/count(*), xc_groupby_tab1.val2, xc_groupby_tab2.val2 from xc_groupby_tab1 full outer join xc_groupby_tab2 on xc_groupby_tab1.val2 = xc_groupby_tab2.val2 group by xc_groupby_tab1.val2, xc_groupby_tab2.val2;
@@ -50,10 +52,12 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate
Output: pg_catalog.count(*), pg_catalog.sum((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))), pg_catalog.avg((avg((xc_groupby_tab1.val * xc_groupby_tab2.val)))), ((pg_catalog.sum((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))))::double precision / (pg_catalog.count(*))::double precision), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Remote Subquery Scan on all
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> GroupAggregate
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val
Sort Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
@@ -78,7 +82,7 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
Sort Key: xc_groupby_tab2.val2
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(30 rows)
+(32 rows)
-- aggregates over aggregates
select sum(y) from (select sum(val) y, val2%2 x from xc_groupby_tab1 group by val2) q1 group by x;
@@ -93,15 +97,18 @@ explain (verbose true, costs false, nodes false) select sum(y) from (select sum(
--------------------------------------------------------------------------------------------------------------
HashAggregate
Output: sum((pg_catalog.sum((sum(xc_groupby_tab1.val))))), ((xc_groupby_tab1.val2 % 2))
+ Group Key: (xc_groupby_tab1.val2 % 2)
-> HashAggregate
Output: pg_catalog.sum((sum(xc_groupby_tab1.val))), (xc_groupby_tab1.val2 % 2), xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: sum(xc_groupby_tab1.val), xc_groupby_tab1.val2, xc_groupby_tab1.val2
-> HashAggregate
Output: sum(xc_groupby_tab1.val), xc_groupby_tab1.val2, xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val, xc_groupby_tab1.val2
-(10 rows)
+(13 rows)
-- group by without aggregate
select val2 from xc_groupby_tab1 group by val2;
@@ -117,13 +124,15 @@ explain (verbose true, costs false, nodes false) select val2 from xc_groupby_tab
------------------------------------------------------
HashAggregate
Output: val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: val2
-> HashAggregate
Output: val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(8 rows)
+(10 rows)
select val + val2 from xc_groupby_tab1 group by val + val2;
?column?
@@ -137,17 +146,19 @@ select val + val2 from xc_groupby_tab1 group by val + val2;
(6 rows)
explain (verbose true, costs false, nodes false) select val + val2 from xc_groupby_tab1 group by val + val2;
- QUERY PLAN
-------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
HashAggregate
Output: ((val + val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab1.val2)
-> Remote Subquery Scan on all
Output: (val + val2)
-> HashAggregate
Output: ((val + val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab1.val2)
-> Seq Scan on public.xc_groupby_tab1
Output: (val + val2)
-(8 rows)
+(10 rows)
select val + val2, val, val2 from xc_groupby_tab1 group by val, val2;
?column? | val | val2
@@ -163,25 +174,26 @@ select val + val2, val, val2 from xc_groupby_tab1 group by val, val2;
(8 rows)
explain (verbose true, costs false, nodes false) select val + val2, val, val2 from xc_groupby_tab1 group by val, val2;
- QUERY PLAN
-------------------------------------------------
+ QUERY PLAN
+--------------------------------------------------------------
Remote Subquery Scan on all
Output: (val + val2), val, val2
-> HashAggregate
Output: (val + val2), val, val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(6 rows)
+(7 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2;
?column? | val | val2
----------+-----+------
- 2 | 1 | 1
6 | 2 | 4
- 5 | 3 | 2
+ 2 | 1 | 1
+ 6 | 4 | 2
7 | 3 | 4
+ 5 | 3 | 2
5 | 4 | 1
- 6 | 4 | 2
(6 rows)
explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2;
@@ -189,45 +201,44 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
---------------------------------------------------------------------------------------------------------
Remote Subquery Scan on all
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
- -> Group
+ -> HashAggregate
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
- -> Sort
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
+ -> Merge Join
Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
- Sort Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
- -> Merge Join
- Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
- Merge Cond: (xc_groupby_tab1.val = xc_groupby_tab2.val)
- -> Sort
+ Merge Cond: (xc_groupby_tab1.val = xc_groupby_tab2.val)
+ -> Sort
+ Output: xc_groupby_tab1.val
+ Sort Key: xc_groupby_tab1.val
+ -> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val
- Sort Key: xc_groupby_tab1.val
- -> Seq Scan on public.xc_groupby_tab1
- Output: xc_groupby_tab1.val
- -> Sort
+ -> Sort
+ Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
+ Sort Key: xc_groupby_tab2.val
+ -> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
- Sort Key: xc_groupby_tab2.val
- -> Seq Scan on public.xc_groupby_tab2
- Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(18 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val + xc_groupby_tab2.val2;
?column?
----------
- 2
5
- 6
7
+ 2
+ 6
(4 rows)
explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val + xc_groupby_tab2.val2;
QUERY PLAN
-----------------------------------------------------------------------------------
- Group
+ HashAggregate
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Remote Subquery Scan on all
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
- -> Sort
+ -> HashAggregate
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
- Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Merge Join
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
Merge Cond: (xc_groupby_tab1.val = xc_groupby_tab2.val)
@@ -241,7 +252,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- group by with aggregates in expression
select count(*) + sum(val) + avg(val), val2 from xc_groupby_tab1 group by val2;
@@ -257,13 +268,15 @@ explain (verbose true, costs false, nodes false) select count(*) + sum(val) + av
--------------------------------------------------------------------------------------------------------------
HashAggregate
Output: (((pg_catalog.count(*) + pg_catalog.sum((sum(val)))))::numeric + pg_catalog.avg((avg(val)))), val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: count(*), sum(val), avg(val), val2
-> HashAggregate
Output: count(*), sum(val), avg(val), val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(8 rows)
+(10 rows)
-- group by with expressions in group by clause
select sum(val), avg(val), 2 * val2 from xc_groupby_tab1 group by 2 * val2;
@@ -279,13 +292,15 @@ explain (verbose true, costs false, nodes false) select sum(val), avg(val), 2 *
--------------------------------------------------------------------------------
HashAggregate
Output: pg_catalog.sum((sum(val))), pg_catalog.avg((avg(val))), ((2 * val2))
+ Group Key: (2 * xc_groupby_tab1.val2)
-> Remote Subquery Scan on all
Output: sum(val), avg(val), (2 * val2)
-> HashAggregate
Output: sum(val), avg(val), ((2 * val2))
+ Group Key: (2 * xc_groupby_tab1.val2)
-> Seq Scan on public.xc_groupby_tab1
Output: (2 * val2), val
-(8 rows)
+(10 rows)
drop table xc_groupby_tab1;
drop table xc_groupby_tab2;
@@ -330,9 +345,10 @@ explain (verbose true, costs false, nodes false) select a,count(a) from xc_group
Sort Key: xc_groupby_def.a
-> HashAggregate
Output: a, count(a)
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -373,9 +389,10 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> HashAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select avg(a) from xc_groupby_def group by b;
avg
@@ -391,13 +408,15 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
-----------------------------------------------------
HashAggregate
Output: pg_catalog.avg((avg(a))), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: avg(a), b
-> HashAggregate
Output: avg(a), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(8 rows)
+(10 rows)
select sum(a) from xc_groupby_def group by b;
sum
@@ -413,13 +432,15 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_d
-----------------------------------------------------
HashAggregate
Output: pg_catalog.sum((sum(a))), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: sum(a), b
-> HashAggregate
Output: sum(a), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(8 rows)
+(10 rows)
select count(*) from xc_groupby_def group by b;
count
@@ -435,13 +456,15 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
-----------------------------------------------------
HashAggregate
Output: pg_catalog.count(*), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: count(*), b
-> HashAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(8 rows)
+(10 rows)
select count(*) from xc_groupby_def where a is not null group by a;
count
@@ -465,10 +488,11 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), a
-> HashAggregate
Output: count(*), a
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
Filter: (xc_groupby_def.a IS NOT NULL)
-(7 rows)
+(8 rows)
select * from (select b from xc_groupby_def group by b) q order by q.b;
b
@@ -487,13 +511,15 @@ explain (verbose true, costs false, nodes false) select * from (select b from xc
Sort Key: xc_groupby_def.b
-> HashAggregate
Output: xc_groupby_def.b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: xc_groupby_def.b
-> HashAggregate
Output: xc_groupby_def.b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: xc_groupby_def.a, xc_groupby_def.b
-(11 rows)
+(13 rows)
select * from (select b,count(b) from xc_groupby_def group by b) q order by q.b;
b | count
@@ -512,13 +538,15 @@ explain (verbose true, costs false, nodes false) select * from (select b,count(b
Sort Key: xc_groupby_def.b
-> HashAggregate
Output: xc_groupby_def.b, count((count(xc_groupby_def.b)))
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: xc_groupby_def.b, count(xc_groupby_def.b)
-> HashAggregate
Output: xc_groupby_def.b, count(xc_groupby_def.b)
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: xc_groupby_def.a, xc_groupby_def.b
-(11 rows)
+(13 rows)
select count(*) from xc_groupby_def where b is null group by b;
count
@@ -531,14 +559,16 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
--------------------------------------------------------
HashAggregate
Output: pg_catalog.count(*), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: count(*), b
-> HashAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
Filter: (xc_groupby_def.b IS NULL)
-(9 rows)
+(11 rows)
create table xc_groupby_g(a int, b float, c numeric);
insert into xc_groupby_g values(1,2.1,3.2);
@@ -558,9 +588,10 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_g
Output: sum(a), a
-> HashAggregate
Output: sum(a), a
+ Group Key: xc_groupby_g.a
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select sum(b) from xc_groupby_g group by b;
sum
@@ -574,13 +605,15 @@ explain (verbose true, costs false, nodes false) select sum(b) from xc_groupby_g
---------------------------------------------------
HashAggregate
Output: sum((sum(b))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: sum(b), b
-> HashAggregate
Output: sum(b), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(8 rows)
+(10 rows)
select sum(c) from xc_groupby_g group by b;
sum
@@ -593,14 +626,16 @@ explain (verbose true, costs false, nodes false) select sum(c) from xc_groupby_g
QUERY PLAN
---------------------------------------------------
HashAggregate
- Output: sum((sum(c))), b
+ Output: pg_catalog.sum((sum(c))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: sum(c), b
-> HashAggregate
Output: sum(c), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(8 rows)
+(10 rows)
select avg(a) from xc_groupby_g group by b;
avg
@@ -614,13 +649,15 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_g
---------------------------------------------------
HashAggregate
Output: pg_catalog.avg((avg(a))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: avg(a), b
-> HashAggregate
Output: avg(a), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(8 rows)
+(10 rows)
select avg(b) from xc_groupby_g group by c;
avg
@@ -634,13 +671,15 @@ explain (verbose true, costs false, nodes false) select avg(b) from xc_groupby_g
---------------------------------------------------
HashAggregate
Output: pg_catalog.avg((avg(b))), c
+ Group Key: xc_groupby_g.c
-> Remote Subquery Scan on all
Output: avg(b), c
-> HashAggregate
Output: avg(b), c
+ Group Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(8 rows)
+(10 rows)
select avg(c) from xc_groupby_g group by c;
avg
@@ -654,13 +693,15 @@ explain (verbose true, costs false, nodes false) select avg(c) from xc_groupby_g
---------------------------------------------------
HashAggregate
Output: pg_catalog.avg((avg(c))), c
+ Group Key: xc_groupby_g.c
-> Remote Subquery Scan on all
Output: avg(c), c
-> HashAggregate
Output: avg(c), c
+ Group Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(8 rows)
+(10 rows)
drop table xc_groupby_def;
drop table xc_groupby_g;
@@ -686,9 +727,10 @@ explain (verbose true, costs false, nodes false) select count(*), sum(val), avg(
Output: count(*), sum(val), avg(val), ((sum(val))::double precision / (count(*))::double precision), val2
-> HashAggregate
Output: count(*), sum(val), avg(val), ((sum(val))::double precision / (count(*))::double precision), val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(6 rows)
+(7 rows)
-- joins and group by
select * from (select count(*), sum(xc_groupby_tab1.val * xc_groupby_tab2.val), avg(xc_groupby_tab1.val*xc_groupby_tab2.val), sum(xc_groupby_tab1.val*xc_groupby_tab2.val)::float8/count(*), xc_groupby_tab1.val2 c1, xc_groupby_tab2.val2 c2 from xc_groupby_tab1 full outer join xc_groupby_tab2 on xc_groupby_tab1.val2 = xc_groupby_tab2.val2 group by xc_groupby_tab1.val2, xc_groupby_tab2.val2) q order by q.c1, q.c2;
@@ -704,9 +746,10 @@ explain (verbose true, costs false, nodes false) select * from (select count(*),
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Remote Subquery Scan on all
- Output: q.count, q.sum, q.avg, q."?column?", q.c1, q.c2
+ Output: count, sum, avg, "?column?", c1, c2
-> GroupAggregate
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), ((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))::double precision / (count(*))::double precision), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val
Sort Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
@@ -723,7 +766,7 @@ explain (verbose true, costs false, nodes false) select * from (select count(*),
Sort Key: xc_groupby_tab2.val2
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- aggregates over aggregates
select * from (select sum(y) sum from (select sum(val) y, val2%2 x from xc_groupby_tab1 group by val2) q1 group by x) q order by q.sum;
@@ -745,11 +788,13 @@ explain (verbose true, costs false, nodes false) select * from (select sum(y) su
Output: q.sum
-> HashAggregate
Output: sum((sum(xc_groupby_tab1.val))), ((xc_groupby_tab1.val2 % 2))
+ Group Key: (xc_groupby_tab1.val2 % 2)
-> HashAggregate
Output: sum(xc_groupby_tab1.val), (xc_groupby_tab1.val2 % 2), xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val, xc_groupby_tab1.val2
-(13 rows)
+(15 rows)
-- group by without aggregate
select val2 from xc_groupby_tab1 group by val2;
@@ -767,9 +812,10 @@ explain (verbose true, costs false, nodes false) select val2 from xc_groupby_tab
Output: val2
-> HashAggregate
Output: val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(6 rows)
+(7 rows)
select * from (select val + val2 sum from xc_groupby_tab1 group by val + val2) q order by q.sum;
sum
@@ -786,15 +832,16 @@ explain (verbose true, costs false, nodes false) select * from (select val + val
QUERY PLAN
--------------------------------------------------------------------------
Remote Subquery Scan on all
- Output: q.sum
+ Output: sum
-> Sort
Output: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
-> HashAggregate
Output: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab1.val2)
-> Seq Scan on public.xc_groupby_tab1
Output: (xc_groupby_tab1.val + xc_groupby_tab1.val2)
-(9 rows)
+(10 rows)
select * from (select val + val2, val, val2 from xc_groupby_tab1 group by val, val2) q order by q.val, q.val2;
?column? | val | val2
@@ -813,15 +860,16 @@ explain (verbose true, costs false, nodes false) select * from (select val + val
QUERY PLAN
---------------------------------------------------------------------------------------------------------------
Remote Subquery Scan on all
- Output: q."?column?", q.val, q.val2
+ Output: "?column?", val, val2
-> Sort
Output: ((xc_groupby_tab1.val + xc_groupby_tab1.val2)), xc_groupby_tab1.val, xc_groupby_tab1.val2
Sort Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> HashAggregate
Output: (xc_groupby_tab1.val + xc_groupby_tab1.val2), xc_groupby_tab1.val, xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val, xc_groupby_tab1.val2
-(9 rows)
+(10 rows)
select * from (select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2) q order by q.val, q.val2;
?column? | val | val2
@@ -835,15 +883,16 @@ select * from (select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab
(6 rows)
explain (verbose true, costs false, nodes false) select * from (select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2) q order by q.val, q.val2;
- QUERY PLAN
----------------------------------------------------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------------------------------------------------------
Remote Subquery Scan on all
- Output: q."?column?", q.val, q.val2
- -> Group
- Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
- -> Sort
- Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
- Sort Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
+ Output: "?column?", val, val2
+ -> Sort
+ Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2)), xc_groupby_tab1.val, xc_groupby_tab2.val2
+ Sort Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
+ -> HashAggregate
+ Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
-> Merge Join
Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
Merge Cond: (xc_groupby_tab1.val = xc_groupby_tab2.val)
@@ -857,7 +906,7 @@ explain (verbose true, costs false, nodes false) select * from (select xc_groupb
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
select * from (select xc_groupby_tab1.val + xc_groupby_tab2.val2 sum from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val + xc_groupby_tab2.val2) q order by q.sum;
sum
@@ -872,12 +921,13 @@ explain (verbose true, costs false, nodes false) select * from (select xc_groupb
QUERY PLAN
-----------------------------------------------------------------------------------
Remote Subquery Scan on all
- Output: q.sum
- -> Group
+ Output: sum
+ -> Sort
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
- -> Sort
+ Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ -> HashAggregate
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
- Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Merge Join
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
Merge Cond: (xc_groupby_tab1.val = xc_groupby_tab2.val)
@@ -891,7 +941,7 @@ explain (verbose true, costs false, nodes false) select * from (select xc_groupb
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- group by with aggregates in expression
select count(*) + sum(val) + avg(val), val2 from xc_groupby_tab1 group by val2;
@@ -909,9 +959,10 @@ explain (verbose true, costs false, nodes false) select count(*) + sum(val) + av
Output: (((count(*) + sum(val)))::numeric + avg(val)), val2
-> HashAggregate
Output: (((count(*) + sum(val)))::numeric + avg(val)), val2
+ Group Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(6 rows)
+(7 rows)
-- group by with expressions in group by clause
select sum(val), avg(val), 2 * val2 from xc_groupby_tab1 group by 2 * val2;
@@ -929,9 +980,10 @@ explain (verbose true, costs false, nodes false) select sum(val), avg(val), 2 *
Output: sum(val), avg(val), (2 * val2)
-> HashAggregate
Output: sum(val), avg(val), ((2 * val2))
+ Group Key: (2 * xc_groupby_tab1.val2)
-> Seq Scan on public.xc_groupby_tab1
Output: (2 * val2), val
-(6 rows)
+(7 rows)
drop table xc_groupby_tab1;
drop table xc_groupby_tab2;
@@ -976,9 +1028,10 @@ explain (verbose true, costs false, nodes false) select a,count(a) from xc_group
Sort Key: xc_groupby_def.a
-> HashAggregate
Output: a, count(a)
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -1003,9 +1056,10 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> HashAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -1030,9 +1084,10 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> HashAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select avg(a) from xc_groupby_def group by b;
avg
@@ -1050,9 +1105,10 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), b
-> HashAggregate
Output: avg(a), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select sum(a) from xc_groupby_def group by b;
sum
@@ -1070,9 +1126,10 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_d
Output: sum(a), b
-> HashAggregate
Output: sum(a), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select count(*) from xc_groupby_def group by b;
count
@@ -1090,9 +1147,10 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), b
-> HashAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
-(6 rows)
+(7 rows)
select count(*) from xc_groupby_def where a is not null group by a;
count
@@ -1116,10 +1174,11 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), a
-> HashAggregate
Output: count(*), a
+ Group Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a, b
Filter: (xc_groupby_def.a IS NOT NULL)
-(7 rows)
+(8 rows)
select * from (select b from xc_groupby_def group by b) q order by q.b;
b
@@ -1134,15 +1193,16 @@ explain (verbose true, costs false, nodes false) select * from (select b from xc
QUERY PLAN
----------------------------------------------------------------
Remote Subquery Scan on all
- Output: q.b
+ Output: b
-> Sort
Output: xc_groupby_def.b
Sort Key: xc_groupby_def.b
-> HashAggregate
Output: xc_groupby_def.b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: xc_groupby_def.a, xc_groupby_def.b
-(9 rows)
+(10 rows)
select * from (select b,count(b) from xc_groupby_def group by b) q order by q.b;
b | count
@@ -1157,15 +1217,16 @@ explain (verbose true, costs false, nodes false) select * from (select b,count(b
QUERY PLAN
-----------------------------------------------------------------
Remote Subquery Scan on all
- Output: q.b, q.count
+ Output: b, count
-> Sort
Output: xc_groupby_def.b, (count(xc_groupby_def.b))
Sort Key: xc_groupby_def.b
-> HashAggregate
Output: xc_groupby_def.b, count(xc_groupby_def.b)
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: xc_groupby_def.a, xc_groupby_def.b
-(9 rows)
+(10 rows)
select count(*) from xc_groupby_def where b is null group by b;
count
@@ -1180,10 +1241,11 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), b
-> HashAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: a, b
Filter: (xc_groupby_def.b IS NULL)
-(7 rows)
+(8 rows)
create table xc_groupby_g(a int, b float, c numeric) distribute by replication;
insert into xc_groupby_g values(1,2.1,3.2);
@@ -1203,9 +1265,10 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_g
Output: sum(a), a
-> HashAggregate
Output: sum(a), a
+ Group Key: xc_groupby_g.a
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select sum(b) from xc_groupby_g group by b;
sum
@@ -1221,9 +1284,10 @@ explain (verbose true, costs false, nodes false) select sum(b) from xc_groupby_g
Output: sum(b), b
-> HashAggregate
Output: sum(b), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select sum(c) from xc_groupby_g group by b;
sum
@@ -1239,9 +1303,10 @@ explain (verbose true, costs false, nodes false) select sum(c) from xc_groupby_g
Output: sum(c), b
-> HashAggregate
Output: sum(c), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select avg(a) from xc_groupby_g group by b;
avg
@@ -1257,9 +1322,10 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_g
Output: avg(a), b
-> HashAggregate
Output: avg(a), b
+ Group Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select avg(b) from xc_groupby_g group by c;
avg
@@ -1275,9 +1341,10 @@ explain (verbose true, costs false, nodes false) select avg(b) from xc_groupby_g
Output: avg(b), c
-> HashAggregate
Output: avg(b), c
+ Group Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
select avg(c) from xc_groupby_g group by c;
avg
@@ -1293,9 +1360,10 @@ explain (verbose true, costs false, nodes false) select avg(c) from xc_groupby_g
Output: avg(c), c
-> HashAggregate
Output: avg(c), c
+ Group Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: a, b, c
-(6 rows)
+(7 rows)
drop table xc_groupby_def;
drop table xc_groupby_g;
@@ -1320,16 +1388,18 @@ explain (verbose true, costs false, nodes false) select count(*), sum(val), avg(
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate
Output: pg_catalog.count(*), pg_catalog.sum((sum(val))), pg_catalog.avg((avg(val))), ((pg_catalog.sum((sum(val))))::double precision / (pg_catalog.count(*))::double precision), val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: count(*), sum(val), avg(val), val2
-> GroupAggregate
Output: count(*), sum(val), avg(val), val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: val2, val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2, val
-(11 rows)
+(13 rows)
-- joins and group by
select count(*), sum(xc_groupby_tab1.val * xc_groupby_tab2.val), avg(xc_groupby_tab1.val*xc_groupby_tab2.val), sum(xc_groupby_tab1.val*xc_groupby_tab2.val)::float8/count(*), xc_groupby_tab1.val2, xc_groupby_tab2.val2 from xc_groupby_tab1 full outer join xc_groupby_tab2 on xc_groupby_tab1.val2 = xc_groupby_tab2.val2 group by xc_groupby_tab1.val2, xc_groupby_tab2.val2;
@@ -1346,10 +1416,12 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate
Output: pg_catalog.count(*), pg_catalog.sum((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))), pg_catalog.avg((avg((xc_groupby_tab1.val * xc_groupby_tab2.val)))), ((pg_catalog.sum((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))))::double precision / (pg_catalog.count(*))::double precision), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Remote Subquery Scan on all
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> GroupAggregate
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val
Sort Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
@@ -1374,7 +1446,7 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
Sort Key: xc_groupby_tab2.val2
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(30 rows)
+(32 rows)
-- aggregates over aggregates
select sum(y) from (select sum(val) y, val2%2 x from xc_groupby_tab1 group by val2) q1 group by x;
@@ -1389,6 +1461,7 @@ explain (verbose true, costs false, nodes false) select sum(y) from (select sum(
--------------------------------------------------------------------------------------------------------------------------
GroupAggregate
Output: sum(q1.y), q1.x
+ Group Key: q1.x
-> Sort
Output: q1.x, q1.y
Sort Key: q1.x
@@ -1396,16 +1469,18 @@ explain (verbose true, costs false, nodes false) select sum(y) from (select sum(
Output: q1.x, q1.y
-> GroupAggregate
Output: pg_catalog.sum((sum(xc_groupby_tab1.val))), (xc_groupby_tab1.val2 % 2), xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: sum(xc_groupby_tab1.val), xc_groupby_tab1.val2, xc_groupby_tab1.val2
-> GroupAggregate
Output: sum(xc_groupby_tab1.val), xc_groupby_tab1.val2, xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab1.val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val2, xc_groupby_tab1.val
-(18 rows)
+(21 rows)
-- group by without aggregate
select val2 from xc_groupby_tab1 group by val2;
@@ -1421,6 +1496,7 @@ explain (verbose true, costs false, nodes false) select val2 from xc_groupby_tab
------------------------------------------------------
Group
Output: val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: val2
-> Sort
@@ -1428,7 +1504,7 @@ explain (verbose true, costs false, nodes false) select val2 from xc_groupby_tab
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2
-(9 rows)
+(10 rows)
select val + val2 from xc_groupby_tab1 group by val + val2;
?column?
@@ -1446,6 +1522,7 @@ explain (verbose true, costs false, nodes false) select val + val2 from xc_group
------------------------------------------------------------------------
Group
Output: ((val + val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab1.val2)
-> Remote Subquery Scan on all
Output: (val + val2)
-> Sort
@@ -1453,7 +1530,7 @@ explain (verbose true, costs false, nodes false) select val + val2 from xc_group
Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
-> Seq Scan on public.xc_groupby_tab1
Output: (val + val2)
-(9 rows)
+(10 rows)
select val + val2, val, val2 from xc_groupby_tab1 group by val, val2;
?column? | val | val2
@@ -1475,12 +1552,13 @@ explain (verbose true, costs false, nodes false) select val + val2, val, val2 fr
Output: (val + val2), val, val2
-> Group
Output: (val + val2), val, val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Sort
Output: val, val2
Sort Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(9 rows)
+(10 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2;
?column? | val | val2
@@ -1500,6 +1578,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
-> Group
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
Sort Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
@@ -1516,7 +1595,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val + xc_groupby_tab2.val2;
?column?
@@ -1532,6 +1611,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
-----------------------------------------------------------------------------------
Group
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ Group Key: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Remote Subquery Scan on all
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Sort
@@ -1550,7 +1630,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- group by with aggregates in expression
select count(*) + sum(val) + avg(val), val2 from xc_groupby_tab1 group by val2;
@@ -1566,16 +1646,18 @@ explain (verbose true, costs false, nodes false) select count(*) + sum(val) + av
--------------------------------------------------------------------------------------------------------------
GroupAggregate
Output: (((pg_catalog.count(*) + pg_catalog.sum((sum(val)))))::numeric + pg_catalog.avg((avg(val)))), val2
+ Group Key: xc_groupby_tab1.val2
-> Remote Subquery Scan on all
Output: count(*), sum(val), avg(val), val2
-> GroupAggregate
Output: count(*), sum(val), avg(val), val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: val2, val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2, val
-(11 rows)
+(13 rows)
-- group by with expressions in group by clause
select sum(val), avg(val), 2 * val2 from xc_groupby_tab1 group by 2 * val2;
@@ -1591,16 +1673,18 @@ explain (verbose true, costs false, nodes false) select sum(val), avg(val), 2 *
--------------------------------------------------------------------------------
GroupAggregate
Output: pg_catalog.sum((sum(val))), pg_catalog.avg((avg(val))), ((2 * val2))
+ Group Key: (2 * xc_groupby_tab1.val2)
-> Remote Subquery Scan on all
Output: sum(val), avg(val), (2 * val2)
-> GroupAggregate
Output: sum(val), avg(val), ((2 * val2))
+ Group Key: ((2 * xc_groupby_tab1.val2))
-> Sort
Output: ((2 * val2)), val
Sort Key: ((2 * xc_groupby_tab1.val2))
-> Seq Scan on public.xc_groupby_tab1
Output: (2 * val2), val
-(11 rows)
+(13 rows)
drop table xc_groupby_tab1;
drop table xc_groupby_tab2;
@@ -1642,12 +1726,13 @@ explain (verbose true, costs false, nodes false) select a,count(a) from xc_group
Output: a, count(a)
-> GroupAggregate
Output: a, count(a)
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -1688,12 +1773,13 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> GroupAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by b;
avg
@@ -1709,16 +1795,18 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
-----------------------------------------------------------
GroupAggregate
Output: pg_catalog.avg((avg(a))), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: avg(a), b
-> GroupAggregate
Output: avg(a), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b, a
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b, a
-(11 rows)
+(13 rows)
select sum(a) from xc_groupby_def group by b;
sum
@@ -1734,16 +1822,18 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_d
-----------------------------------------------------------
GroupAggregate
Output: pg_catalog.sum((sum(a))), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: sum(a), b
-> GroupAggregate
Output: sum(a), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b, a
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b, a
-(11 rows)
+(13 rows)
select count(*) from xc_groupby_def group by b;
count
@@ -1759,16 +1849,18 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
-----------------------------------------------------------
GroupAggregate
Output: pg_catalog.count(*), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: count(*), b
-> GroupAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(11 rows)
+(13 rows)
select count(*) from xc_groupby_def where a is not null group by a;
count
@@ -1792,13 +1884,14 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), a
-> GroupAggregate
Output: count(*), a
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
Filter: (xc_groupby_def.a IS NOT NULL)
-(10 rows)
+(11 rows)
select b from xc_groupby_def group by b;
b
@@ -1814,6 +1907,7 @@ explain (verbose true, costs false, nodes false) select b from xc_groupby_def gr
-----------------------------------------------------
Group
Output: b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: b
-> Sort
@@ -1821,7 +1915,7 @@ explain (verbose true, costs false, nodes false) select b from xc_groupby_def gr
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(9 rows)
+(10 rows)
select b,count(b) from xc_groupby_def group by b;
b | count
@@ -1837,16 +1931,18 @@ explain (verbose true, costs false, nodes false) select b,count(b) from xc_group
-----------------------------------------------------------
GroupAggregate
Output: b, count((count(b)))
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: b, count(b)
-> GroupAggregate
Output: b, count(b)
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(11 rows)
+(13 rows)
select count(*) from xc_groupby_def where b is null group by b;
count
@@ -1859,17 +1955,19 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
--------------------------------------------------------------
GroupAggregate
Output: pg_catalog.count(*), b
+ Group Key: xc_groupby_def.b
-> Remote Subquery Scan on all
Output: count(*), b
-> GroupAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
Filter: (xc_groupby_def.b IS NULL)
-(12 rows)
+(14 rows)
create table xc_groupby_g(a int, b float, c numeric);
insert into xc_groupby_g values(1,2.1,3.2);
@@ -1889,12 +1987,13 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_g
Output: sum(a), a
-> GroupAggregate
Output: sum(a), a
+ Group Key: xc_groupby_g.a
-> Sort
Output: a
Sort Key: xc_groupby_g.a
-> Seq Scan on public.xc_groupby_g
Output: a
-(9 rows)
+(10 rows)
select sum(b) from xc_groupby_g group by b;
sum
@@ -1908,16 +2007,18 @@ explain (verbose true, costs false, nodes false) select sum(b) from xc_groupby_g
---------------------------------------------------------
GroupAggregate
Output: sum((sum(b))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: sum(b), b
-> GroupAggregate
Output: sum(b), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b
-(11 rows)
+(13 rows)
select sum(c) from xc_groupby_g group by b;
sum
@@ -1930,17 +2031,19 @@ explain (verbose true, costs false, nodes false) select sum(c) from xc_groupby_g
QUERY PLAN
---------------------------------------------------------
GroupAggregate
- Output: sum((sum(c))), b
+ Output: pg_catalog.sum((sum(c))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: sum(c), b
-> GroupAggregate
Output: sum(c), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b, c
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b, c
-(11 rows)
+(13 rows)
select avg(a) from xc_groupby_g group by b;
avg
@@ -1954,16 +2057,18 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_g
---------------------------------------------------------
GroupAggregate
Output: pg_catalog.avg((avg(a))), b
+ Group Key: xc_groupby_g.b
-> Remote Subquery Scan on all
Output: avg(a), b
-> GroupAggregate
Output: avg(a), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b, a
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b, a
-(11 rows)
+(13 rows)
select avg(b) from xc_groupby_g group by c;
avg
@@ -1977,16 +2082,18 @@ explain (verbose true, costs false, nodes false) select avg(b) from xc_groupby_g
---------------------------------------------------------
GroupAggregate
Output: pg_catalog.avg((avg(b))), c
+ Group Key: xc_groupby_g.c
-> Remote Subquery Scan on all
Output: avg(b), c
-> GroupAggregate
Output: avg(b), c
+ Group Key: xc_groupby_g.c
-> Sort
Output: c, b
Sort Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: c, b
-(11 rows)
+(13 rows)
select avg(c) from xc_groupby_g group by c;
avg
@@ -2000,16 +2107,18 @@ explain (verbose true, costs false, nodes false) select avg(c) from xc_groupby_g
---------------------------------------------------------
GroupAggregate
Output: pg_catalog.avg((avg(c))), c
+ Group Key: xc_groupby_g.c
-> Remote Subquery Scan on all
Output: avg(c), c
-> GroupAggregate
Output: avg(c), c
+ Group Key: xc_groupby_g.c
-> Sort
Output: c
Sort Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: c
-(11 rows)
+(13 rows)
drop table xc_groupby_def;
drop table xc_groupby_g;
@@ -2035,12 +2144,13 @@ explain (verbose true, costs false, nodes false) select count(*), sum(val), avg(
Output: count(*), sum(val), avg(val), ((sum(val))::double precision / (count(*))::double precision), val2
-> GroupAggregate
Output: count(*), sum(val), avg(val), ((sum(val))::double precision / (count(*))::double precision), val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: val2, val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2, val
-(9 rows)
+(10 rows)
-- joins and group by
select count(*), sum(xc_groupby_tab1.val * xc_groupby_tab2.val), avg(xc_groupby_tab1.val*xc_groupby_tab2.val), sum(xc_groupby_tab1.val*xc_groupby_tab2.val)::float8/count(*), xc_groupby_tab1.val2, xc_groupby_tab2.val2 from xc_groupby_tab1 full outer join xc_groupby_tab2 on xc_groupby_tab1.val2 = xc_groupby_tab2.val2 group by xc_groupby_tab1.val2, xc_groupby_tab2.val2;
@@ -2059,6 +2169,7 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), ((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))::double precision / (count(*))::double precision), xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> GroupAggregate
Output: count(*), sum((xc_groupby_tab1.val * xc_groupby_tab2.val)), avg((xc_groupby_tab1.val * xc_groupby_tab2.val)), ((sum((xc_groupby_tab1.val * xc_groupby_tab2.val)))::double precision / (count(*))::double precision), xc_groupby_tab1.val2, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val
Sort Key: xc_groupby_tab1.val2, xc_groupby_tab2.val2
@@ -2075,7 +2186,7 @@ explain (verbose true, costs false, nodes false) select count(*), sum(xc_groupby
Sort Key: xc_groupby_tab2.val2
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- aggregates over aggregates
select sum(y) from (select sum(val) y, val2%2 x from xc_groupby_tab1 group by val2) q1 group by x;
@@ -2092,6 +2203,7 @@ explain (verbose true, costs false, nodes false) select sum(y) from (select sum(
Output: sum(q1.y), q1.x
-> GroupAggregate
Output: sum(q1.y), q1.x
+ Group Key: q1.x
-> Sort
Output: q1.x, q1.y
Sort Key: q1.x
@@ -2099,12 +2211,13 @@ explain (verbose true, costs false, nodes false) select sum(y) from (select sum(
Output: q1.x, q1.y
-> GroupAggregate
Output: sum(xc_groupby_tab1.val), (xc_groupby_tab1.val2 % 2), xc_groupby_tab1.val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: xc_groupby_tab1.val2, xc_groupby_tab1.val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: xc_groupby_tab1.val2, xc_groupby_tab1.val
-(16 rows)
+(18 rows)
-- group by without aggregate
select val2 from xc_groupby_tab1 group by val2;
@@ -2122,12 +2235,13 @@ explain (verbose true, costs false, nodes false) select val2 from xc_groupby_tab
Output: val2
-> Group
Output: val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: val2
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2
-(9 rows)
+(10 rows)
select val + val2 from xc_groupby_tab1 group by val + val2;
?column?
@@ -2147,12 +2261,13 @@ explain (verbose true, costs false, nodes false) select val + val2 from xc_group
Output: (val + val2)
-> Group
Output: ((val + val2))
+ Group Key: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
-> Sort
Output: ((val + val2))
Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab1.val2))
-> Seq Scan on public.xc_groupby_tab1
Output: (val + val2)
-(9 rows)
+(10 rows)
select val + val2, val, val2 from xc_groupby_tab1 group by val, val2;
?column? | val | val2
@@ -2174,12 +2289,13 @@ explain (verbose true, costs false, nodes false) select val + val2, val, val2 fr
Output: (val + val2), val, val2
-> Group
Output: (val + val2), val, val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Sort
Output: val, val2
Sort Key: xc_groupby_tab1.val, xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val, val2
-(9 rows)
+(10 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2, xc_groupby_tab1.val, xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val, xc_groupby_tab2.val2;
?column? | val | val2
@@ -2199,6 +2315,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
-> Group
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2), xc_groupby_tab1.val, xc_groupby_tab2.val2
+ Group Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
-> Sort
Output: xc_groupby_tab1.val, xc_groupby_tab2.val2
Sort Key: xc_groupby_tab1.val, xc_groupby_tab2.val2
@@ -2215,7 +2332,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
select xc_groupby_tab1.val + xc_groupby_tab2.val2 from xc_groupby_tab1, xc_groupby_tab2 where xc_groupby_tab1.val = xc_groupby_tab2.val group by xc_groupby_tab1.val + xc_groupby_tab2.val2;
?column?
@@ -2233,6 +2350,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Output: (xc_groupby_tab1.val + xc_groupby_tab2.val2)
-> Group
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
+ Group Key: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
-> Sort
Output: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
Sort Key: ((xc_groupby_tab1.val + xc_groupby_tab2.val2))
@@ -2249,7 +2367,7 @@ explain (verbose true, costs false, nodes false) select xc_groupby_tab1.val + xc
Sort Key: xc_groupby_tab2.val
-> Seq Scan on public.xc_groupby_tab2
Output: xc_groupby_tab2.val2, xc_groupby_tab2.val
-(20 rows)
+(21 rows)
-- group by with aggregates in expression
select count(*) + sum(val) + avg(val), val2 from xc_groupby_tab1 group by val2;
@@ -2267,12 +2385,13 @@ explain (verbose true, costs false, nodes false) select count(*) + sum(val) + av
Output: (((count(*) + sum(val)))::numeric + avg(val)), val2
-> GroupAggregate
Output: (((count(*) + sum(val)))::numeric + avg(val)), val2
+ Group Key: xc_groupby_tab1.val2
-> Sort
Output: val2, val
Sort Key: xc_groupby_tab1.val2
-> Seq Scan on public.xc_groupby_tab1
Output: val2, val
-(9 rows)
+(10 rows)
-- group by with expressions in group by clause
select sum(val), avg(val), 2 * val2 from xc_groupby_tab1 group by 2 * val2;
@@ -2290,12 +2409,13 @@ explain (verbose true, costs false, nodes false) select sum(val), avg(val), 2 *
Output: sum(val), avg(val), (2 * val2)
-> GroupAggregate
Output: sum(val), avg(val), ((2 * val2))
+ Group Key: ((2 * xc_groupby_tab1.val2))
-> Sort
Output: ((2 * val2)), val
Sort Key: ((2 * xc_groupby_tab1.val2))
-> Seq Scan on public.xc_groupby_tab1
Output: (2 * val2), val
-(9 rows)
+(10 rows)
drop table xc_groupby_tab1;
drop table xc_groupby_tab2;
@@ -2337,12 +2457,13 @@ explain (verbose true, costs false, nodes false) select a,count(a) from xc_group
Output: a, count(a)
-> GroupAggregate
Output: a, count(a)
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -2367,12 +2488,13 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> GroupAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by a;
avg
@@ -2397,12 +2519,13 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), a
-> GroupAggregate
Output: avg(a), a
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_def group by b;
avg
@@ -2420,12 +2543,13 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_d
Output: avg(a), b
-> GroupAggregate
Output: avg(a), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b, a
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b, a
-(9 rows)
+(10 rows)
select sum(a) from xc_groupby_def group by b;
sum
@@ -2443,12 +2567,13 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_d
Output: sum(a), b
-> GroupAggregate
Output: sum(a), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b, a
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b, a
-(9 rows)
+(10 rows)
select count(*) from xc_groupby_def group by b;
count
@@ -2466,12 +2591,13 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), b
-> GroupAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(9 rows)
+(10 rows)
select count(*) from xc_groupby_def where a is not null group by a;
count
@@ -2495,13 +2621,14 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), a
-> GroupAggregate
Output: count(*), a
+ Group Key: xc_groupby_def.a
-> Sort
Output: a
Sort Key: xc_groupby_def.a
-> Seq Scan on public.xc_groupby_def
Output: a
Filter: (xc_groupby_def.a IS NOT NULL)
-(10 rows)
+(11 rows)
select b from xc_groupby_def group by b;
b
@@ -2519,12 +2646,13 @@ explain (verbose true, costs false, nodes false) select b from xc_groupby_def gr
Output: b
-> Group
Output: b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(9 rows)
+(10 rows)
select b,count(b) from xc_groupby_def group by b;
b | count
@@ -2542,12 +2670,13 @@ explain (verbose true, costs false, nodes false) select b,count(b) from xc_group
Output: b, count(b)
-> GroupAggregate
Output: b, count(b)
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
-(9 rows)
+(10 rows)
select count(*) from xc_groupby_def where b is null group by b;
count
@@ -2562,13 +2691,14 @@ explain (verbose true, costs false, nodes false) select count(*) from xc_groupby
Output: count(*), b
-> GroupAggregate
Output: count(*), b
+ Group Key: xc_groupby_def.b
-> Sort
Output: b
Sort Key: xc_groupby_def.b
-> Seq Scan on public.xc_groupby_def
Output: b
Filter: (xc_groupby_def.b IS NULL)
-(10 rows)
+(11 rows)
create table xc_groupby_g(a int, b float, c numeric) distribute by replication;
insert into xc_groupby_g values(1,2.1,3.2);
@@ -2588,12 +2718,13 @@ explain (verbose true, costs false, nodes false) select sum(a) from xc_groupby_g
Output: sum(a), a
-> GroupAggregate
Output: sum(a), a
+ Group Key: xc_groupby_g.a
-> Sort
Output: a
Sort Key: xc_groupby_g.a
-> Seq Scan on public.xc_groupby_g
Output: a
-(9 rows)
+(10 rows)
select sum(b) from xc_groupby_g group by b;
sum
@@ -2609,12 +2740,13 @@ explain (verbose true, costs false, nodes false) select sum(b) from xc_groupby_g
Output: sum(b), b
-> GroupAggregate
Output: sum(b), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b
-(9 rows)
+(10 rows)
select sum(c) from xc_groupby_g group by b;
sum
@@ -2630,12 +2762,13 @@ explain (verbose true, costs false, nodes false) select sum(c) from xc_groupby_g
Output: sum(c), b
-> GroupAggregate
Output: sum(c), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b, c
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b, c
-(9 rows)
+(10 rows)
select avg(a) from xc_groupby_g group by b;
avg
@@ -2651,12 +2784,13 @@ explain (verbose true, costs false, nodes false) select avg(a) from xc_groupby_g
Output: avg(a), b
-> GroupAggregate
Output: avg(a), b
+ Group Key: xc_groupby_g.b
-> Sort
Output: b, a
Sort Key: xc_groupby_g.b
-> Seq Scan on public.xc_groupby_g
Output: b, a
-(9 rows)
+(10 rows)
select avg(b) from xc_groupby_g group by c;
avg
@@ -2672,12 +2806,13 @@ explain (verbose true, costs false, nodes false) select avg(b) from xc_groupby_g
Output: avg(b), c
-> GroupAggregate
Output: avg(b), c
+ Group Key: xc_groupby_g.c
-> Sort
Output: c, b
Sort Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: c, b
-(9 rows)
+(10 rows)
select avg(c) from xc_groupby_g group by c;
avg
@@ -2693,12 +2828,13 @@ explain (verbose true, costs false, nodes false) select avg(c) from xc_groupby_g
Output: avg(c), c
-> GroupAggregate
Output: avg(c), c
+ Group Key: xc_groupby_g.c
-> Sort
Output: c
Sort Key: xc_groupby_g.c
-> Seq Scan on public.xc_groupby_g
Output: c
-(9 rows)
+(10 rows)
drop table xc_groupby_def;
drop table xc_groupby_g;
diff --git a/src/test/regress/output/largeobject_3.source b/src/test/regress/output/largeobject_3.source
index ad316581bf..f7b6f8adb3 100644
--- a/src/test/regress/output/largeobject_3.source
+++ b/src/test/regress/output/largeobject_3.source
@@ -11,6 +11,26 @@ CREATE TABLE lotest_stash_values (loid oid, junk integer, fd integer);
INSERT INTO lotest_stash_values (loid) VALUES( lo_creat(42) );
ERROR: Postgres-XL does not yet support large objects
DETAIL: The feature is not currently supported
+-- Test ALTER LARGE OBJECT
+CREATE ROLE regresslo;
+DO $$
+ BEGIN
+ EXECUTE 'ALTER LARGE OBJECT ' || (select loid from lotest_stash_values)
+ || ' OWNER TO regresslo';
+ END
+$$;
+ERROR: query string argument of EXECUTE is null
+CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE statement
+SELECT
+ rol.rolname
+FROM
+ lotest_stash_values s
+ JOIN pg_largeobject_metadata lo ON s.loid = lo.oid
+ JOIN pg_authid rol ON lo.lomowner = rol.oid;
+ rolname
+---------
+(0 rows)
+
-- NOTE: large objects require transactions
BEGIN;
-- lo_open(lobjId oid, mode integer) returns integer
@@ -24,27 +44,35 @@ UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS in
-- lowrite(fd integer, data bytea) returns integer
-- the integer is the number of bytes written
SELECT lowrite(fd, '
-Whose woods these are I think I know,
-His house is in the village though.
-He will not see me stopping here,
-To watch his woods fill up with snow.
-
-My little horse must think it queer,
-To stop without a farmhouse near,
-Between the woods and frozen lake,
-The darkest evening of the year.
-
-He gives his harness bells a shake,
-To ask if there is some mistake.
-The only other sound''s the sweep,
-Of easy wind and downy flake.
-
-The woods are lovely, dark and deep,
-But I have promises to keep,
-And miles to go before I sleep,
-And miles to go before I sleep.
-
- -- Robert Frost
+I wandered lonely as a cloud
+That floats on high o''er vales and hills,
+When all at once I saw a crowd,
+A host, of golden daffodils;
+Beside the lake, beneath the trees,
+Fluttering and dancing in the breeze.
+
+Continuous as the stars that shine
+And twinkle on the milky way,
+They stretched in never-ending line
+Along the margin of a bay:
+Ten thousand saw I at a glance,
+Tossing their heads in sprightly dance.
+
+The waves beside them danced; but they
+Out-did the sparkling waves in glee:
+A poet could not but be gay,
+In such a jocund company:
+I gazed--and gazed--but little thought
+What wealth the show to me had brought:
+
+For oft, when on my couch I lie
+In vacant or in pensive mood,
+They flash upon that inward eye
+Which is the bliss of solitude;
+And then my heart with pleasure fills,
+And dances with the daffodils.
+
+ -- William Wordsworth
') FROM lotest_stash_values;
lowrite
---------
@@ -58,6 +86,16 @@ SELECT lo_close(fd) FROM lotest_stash_values;
(0 rows)
END;
+-- Copy to another large object.
+-- Note: we intentionally don't remove the object created here;
+-- it's left behind to help test pg_dump.
+SELECT lo_from_bytea(0, lo_get(loid)) AS newloid FROM lotest_stash_values
+\gset
+no rows returned for \gset
+-- Ideally we'd put a comment on this object for pg_dump testing purposes.
+-- But since pg_upgrade fails to preserve large object comments, doing so
+-- would break pg_upgrade's regression test.
+-- COMMENT ON LARGE OBJECT :newloid IS 'I Wandered Lonely as a Cloud';
-- Read out a portion
BEGIN;
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS integer));
@@ -67,14 +105,14 @@ UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS inte
-- SEEK_CUR (= 1) meaning relative to current position
-- SEEK_END (= 2) meaning relative to end (offset better be negative)
-- returns current position in file
-SELECT lo_lseek(fd, 422, 0) FROM lotest_stash_values;
+SELECT lo_lseek(fd, 104, 0) FROM lotest_stash_values;
lo_lseek
----------
(0 rows)
-- loread/lowrite names are wonky, different from other functions which are lo_*
-- loread(fd integer, len integer) returns bytea
-SELECT loread(fd, 35) FROM lotest_stash_values;
+SELECT loread(fd, 28) FROM lotest_stash_values;
loread
--------
(0 rows)
@@ -94,12 +132,12 @@ SELECT lo_tell(fd) FROM lotest_stash_values;
---------
(0 rows)
-SELECT lo_lseek(fd, -156, 2) FROM lotest_stash_values;
+SELECT lo_lseek(fd, -744, 2) FROM lotest_stash_values;
lo_lseek
----------
(0 rows)
-SELECT loread(fd, 35) FROM lotest_stash_values;
+SELECT loread(fd, 28) FROM lotest_stash_values;
loread
--------
(0 rows)
@@ -121,7 +159,7 @@ ABORT;
-- Test truncation.
BEGIN;
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS integer));
-SELECT lo_truncate(fd, 10) FROM lotest_stash_values;
+SELECT lo_truncate(fd, 11) FROM lotest_stash_values;
lo_truncate
-------------
(0 rows)
@@ -172,6 +210,75 @@ SELECT lo_close(fd) FROM lotest_stash_values;
(0 rows)
END;
+-- Test 64-bit large object functions.
+BEGIN;
+UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS integer));
+SELECT lo_lseek64(fd, 4294967296, 0) FROM lotest_stash_values;
+ lo_lseek64
+------------
+(0 rows)
+
+SELECT lowrite(fd, 'offset:4GB') FROM lotest_stash_values;
+ lowrite
+---------
+(0 rows)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+-----------
+(0 rows)
+
+SELECT lo_lseek64(fd, -10, 1) FROM lotest_stash_values;
+ lo_lseek64
+------------
+(0 rows)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+-----------
+(0 rows)
+
+SELECT loread(fd, 10) FROM lotest_stash_values;
+ loread
+--------
+(0 rows)
+
+SELECT lo_truncate64(fd, 5000000000) FROM lotest_stash_values;
+ lo_truncate64
+---------------
+(0 rows)
+
+SELECT lo_lseek64(fd, 0, 2) FROM lotest_stash_values;
+ lo_lseek64
+------------
+(0 rows)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+-----------
+(0 rows)
+
+SELECT lo_truncate64(fd, 3000000000) FROM lotest_stash_values;
+ lo_truncate64
+---------------
+(0 rows)
+
+SELECT lo_lseek64(fd, 0, 2) FROM lotest_stash_values;
+ lo_lseek64
+------------
+(0 rows)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+-----------
+(0 rows)
+
+SELECT lo_close(fd) FROM lotest_stash_values;
+ lo_close
+----------
+(0 rows)
+
+END;
-- lo_unlink(lobjId oid) returns integer
-- return value appears to always be 1
SELECT lo_unlink(loid) from lotest_stash_values;
@@ -185,6 +292,12 @@ ERROR: Postgres-XL does not yet support large objects
DETAIL: The feature is not currently supported
BEGIN;
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS integer));
+-- verify length of large object
+SELECT lo_lseek(fd, 0, 2) FROM lotest_stash_values;
+ lo_lseek
+----------
+(0 rows)
+
-- with the default BLKSZ, LOBLKSZ = 2048, so this positions us for a block
-- edge case
SELECT lo_lseek(fd, 2030, 0) FROM lotest_stash_values;
@@ -263,3 +376,87 @@ SELECT lo_unlink(loid) FROM lotest_stash_values;
ERROR: Postgres-XL does not yet support large objects
DETAIL: The feature is not currently supported
TRUNCATE lotest_stash_values;
+\lo_import 'results/lotest.txt'
+\set newloid :LASTOID
+-- just make sure \lo_export does not barf
+\lo_export :newloid 'results/lotest2.txt'
+-- This is a hack to test that export/import are reversible
+-- This uses knowledge about the inner workings of large object mechanism
+-- which should not be used outside it. This makes it a HACK
+SELECT pageno, data FROM pg_largeobject WHERE loid = (SELECT loid from lotest_stash_values)
+EXCEPT
+SELECT pageno, data FROM pg_largeobject WHERE loid = :newloid;
+ pageno | data
+--------+------
+(0 rows)
+
+SELECT lo_unlink(loid) FROM lotest_stash_values;
+ lo_unlink
+-----------
+ 1
+(1 row)
+
+TRUNCATE lotest_stash_values;
+\lo_unlink :newloid
+\lo_import 'results/lotest.txt'
+\set newloid_1 :LASTOID
+SELECT lo_from_bytea(0, lo_get(:newloid_1)) AS newloid_2
+\gset
+SELECT md5(lo_get(:newloid_1)) = md5(lo_get(:newloid_2));
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT lo_get(:newloid_1, 0, 20);
+ lo_get
+-------------------------------------------
+ 8800\0110\0110\0110\0110\0110\0110\011800
+(1 row)
+
+SELECT lo_get(:newloid_1, 10, 20);
+ lo_get
+-------------------------------------------
+ \0110\0110\0110\011800\011800\0113800\011
+(1 row)
+
+SELECT lo_put(:newloid_1, 5, decode('afafafaf', 'hex'));
+ lo_put
+--------
+
+(1 row)
+
+SELECT lo_get(:newloid_1, 0, 20);
+ lo_get
+-------------------------------------------------
+ 8800\011\257\257\257\2570\0110\0110\0110\011800
+(1 row)
+
+SELECT lo_put(:newloid_1, 4294967310, 'foo');
+ lo_put
+--------
+
+(1 row)
+
+SELECT lo_get(:newloid_1);
+ERROR: large object read request is too large
+SELECT lo_get(:newloid_1, 4294967294, 100);
+ lo_get
+---------------------------------------------------------------------
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000foo
+(1 row)
+
+\lo_unlink :newloid_1
+\lo_unlink :newloid_2
+-- This object is left in the database for pg_dump test purposes
+SELECT lo_from_bytea(0, E'\\xdeadbeef') AS newloid
+\gset
+SET bytea_output TO hex;
+SELECT lo_get(:newloid);
+ lo_get
+------------
+ \xdeadbeef
+(1 row)
+
+DROP TABLE lotest_stash_values;
+DROP ROLE regresslo;