Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug] Wrong results: GROUP BY a constant expression returns one row for empty input

Đã đóng
#2,025 1 bình luận 2 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 3 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
48/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c, postgresql, sql
Lĩnh vực
databases

Hướng nghiên cứu

Start by reproducing the two queries with optimizer = off and inspecting the provided EXPLAIN output, then trace how the PostgreSQL planner handles constant GROUP BY keys and multiphase aggregation. Done means empty input produces zero rows in both cases, without regressing non-empty inputs or the GPORCA path.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

type: Bug
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?
  • Yes, I am willing to submit a PR!
Code of Conduct
Ngôn ngữ chính
C
Star
1.4k
Fork
262
Merge trung bình
4 ngày 20 giờ
Pull request đã merge (30 ngày)
57

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/cloudberry

Tất cả issue của apache/cloudberry

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.