Skip to content

[Bug] GPORCA: ERROR "btree index keys must be ordered by attribute" when a qual references an INCLUDE column #2026

Description

@roseduan

Apache Cloudberry version

No response

What happened

With GPORCA (optimizer = on), a qual on a btree index's INCLUDE (non-key) column can be pushed into the Index Cond. INCLUDE columns are payload only and are not searchable, so the executor
rejects the scan keys at runtime:

ERROR:  btree index keys must be ordered by attribute (nbtutils.c:799)

The Postgres planner (optimizer = off) is not affected. The table does not need to contain any rows.

What you think should happen instead

No response

How to reproduce

CREATE TABLE c2t(a int, b int) DISTRIBUTED BY (a);
CREATE INDEX ci1 ON c2t USING btree (a) INCLUDE (b);

SET optimizer = on;
SELECT a, b FROM c2t WHERE b IS NULL;
-- ERROR:  btree index keys must be ordered by attribute (nbtutils.c:799)  (seg2 slice1 ...)

The plan puts the INCLUDE column b into the Index Cond:

EXPLAIN (COSTS OFF) SELECT a, b FROM c2t WHERE b IS NULL;

 Gather Motion 3:1  (slice1; segments: 3)
   ->  Index Scan using ci1 on c2t
         Index Cond: (b IS NULL)
 Optimizer: GPORCA

Same error with GROUP BY and with an index whose INCLUDE list repeats a key column:

CREATE TABLE c1t(a int, b int) DISTRIBUTED BY (a);
CREATE INDEX ci0 ON c1t USING btree (a) INCLUDE (a, b);
SET optimizer = on;
SELECT a, b FROM c1t WHERE b IS NULL GROUP BY a, b;
-- ERROR:  btree index keys must be ordered by attribute (nbtutils.c:799)

With SET optimizer = off; all of the above return the correct rows.

Operating System

any

Anything else

No response

Are you willing to submit PR?

  • Yes, I am willing to submit a PR!

Code of Conduct

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: BugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions