Apache Cloudberry version
main branch
What happened
With the Postgres planner (optimizer = off), a query that groups by a constant expression returns one row when the input table is empty. A GROUP BY over zero input rows has zero groups, so the
correct answer is no rows.
GPORCA (optimizer = on) is not affected. Non-empty inputs are not affected — the extra row only appears when the input is empty.
What you think should happen instead
No response
How to reproduce
CREATE TABLE g(c0 boolean) DISTRIBUTED BY (c0); -- left EMPTY
SET optimizer = off;
SELECT count(*) FROM g GROUP BY 'x'::text;
-- count
-- -------
-- 0 <-- WRONG, expected 0 rows
SELECT 1 FROM g GROUP BY (0.25)::MONEY HAVING count(*) = 0;
-- ?column?
-- ----------
-- 1 <-- WRONG, expected 0 rows
Expected in both cases: (0 rows).
The plan shows the grouping key disappearing and the final aggregate becoming a plain Aggregate, which always emits one row:
EXPLAIN (VERBOSE, COSTS OFF) SELECT count(*) FROM g GROUP BY 'x'::text;
Finalize Aggregate
Output: count(*), 'x'::text
-> Gather Motion 3:1 (slice1; segments: 3)
Output: (PARTIAL count(*))
-> Partial GroupAggregate
Output: PARTIAL count(*)
-> Seq Scan on public.g
Workarounds
SET optimizer = on; (GPORCA), or
SET gp_enable_multiphase_agg = off;
Operating System
any
Anything else
No response
Are you willing to submit PR?
Code of Conduct
Apache Cloudberry version
main branch
What happened
With the Postgres planner (
optimizer = off), a query that groups by a constant expression returns one row when the input table is empty. AGROUP BYover zero input rows has zero groups, so thecorrect answer is no rows.
GPORCA (
optimizer = on) is not affected. Non-empty inputs are not affected — the extra row only appears when the input is empty.What you think should happen instead
No response
How to reproduce
Expected in both cases:
(0 rows).The plan shows the grouping key disappearing and the final aggregate becoming a plain
Aggregate, which always emits one row:Workarounds
SET optimizer = on;(GPORCA), orSET gp_enable_multiphase_agg = off;Operating System
any
Anything else
No response
Are you willing to submit PR?
Code of Conduct