Thread

  1. BUG #19353: Error XX000 if referencing expanded array in grouping set: variable not found in subplan target list

    PG Bug reporting form <noreply@postgresql.org> — 2025-12-12T10:11:15Z

    The following bug has been logged on the website:
    
    Bug reference:      19353
    Logged by:          Marian MULLER REBEYROL
    Email address:      marian.muller@serli.com
    PostgreSQL version: 18.1
    Operating system:   Linux
    Description:        
    
    Hi,
    
    Let me start by thanking you for providing such a great tool!
    
    After upgrading to Postgres 18 I've come across an error I wasn't getting
    beforehand. Here's a minimal way to reproduce the issue, that used to work
    well in Postgres 12 and 17 at least.
    
    Table and data:
    ```
    create table items (
      id      varchar(255) primary key,
      brands  varchar array,
      markets varchar array
    );
    insert into items values ('Item1', '{Brand A,Brand B}', '{Market A}');
    insert into items values ('Item2', '{Brand B}', '{Market B,Market A}');
    insert into items values ('Item3', '{Brand A,Brand C}', '{Market B}');
    ```
    
    When querying this table using grouping sets, I get an internal error as
    soon as the grouping sets reference an expanded array, for instance this
    query works:
    ```
    SELECT brands, markets, count(distinct id) count
    FROM items
    GROUP BY GROUPING SETS (brands, markets, ())
    ORDER BY brands asc, markets asc;
    ```
    
    But this one triggers an error:
    ```
    SELECT brands, unnest(markets) as market, count(distinct id) count
    FROM items
    GROUP BY GROUPING SETS (brands, market, ())
    ORDER BY brands asc, market asc;
    ```
    
    This gives me the following error on the latest release (PostgreSQL 18.1 on
    x86_64-pc-linux-gnu, compiled by gcc (GCC) 15.2.1 20251112, 64-bit):
    ```
    ERROR:  XX000: variable not found in subplan target list
    LOCATION:  fix_upper_expr_mutator, setrefs.c:3314
    ```
    
    I've confirmed the error still exists with a vanilla freshly-compiled
    Postgres (PostgreSQL 19devel on x86_64-pc-linux-gnu, compiled by gcc (GCC)
    15.2.1 20251112, 64-bit ; latest commit at the time: b65f1ad):
    ```
    2025-12-12 10:39:51.151 CET [347004] ERROR:  variable not found in subplan
    target list
    2025-12-12 10:39:51.151 CET [347004] STATEMENT:  SELECT brands,
    unnest(markets) as market, count(distinct id) count
            FROM items
            GROUP BY GROUPING SETS (brands, market, ())
            ORDER BY brands asc, market asc;
    ERROR:  XX000: variable not found in subplan target list
    LOCATION:  fix_upper_expr_mutator, setrefs.c:3335
    ```
    
    While this query used to work in previous versions, I'm unsure from the
    documentation whether it is expected to work or not.
    
    My platform is GNU/Linux (up-to-date Manjaro), kernel 6.16.8, on x86_64.
    I've also experienced the error on a cloud-hosted Postgres instance.
    
    I've tried to be exhaustive but will gladly provide more information if
    necessary.
    
    Thanks.