Skip to content

wrong order produced by batch sorted merge in multi-column orderby #9922

Description

@akuzm
  CREATE TABLE bsm_segby(ts timestamptz NOT NULL, grp int NOT NULL, name text NOT NULL);                                                                                             
  SELECT create_hypertable('bsm_segby','ts',chunk_time_interval=>interval '100 day');                                                                                                
  ALTER TABLE bsm_segby SET (timescaledb.compress,                                                                                                                                   
                             timescaledb.compress_segmentby='grp',                                                                                                                   
                             timescaledb.compress_orderby='name asc, ts asc');                                                                                                       
  INSERT INTO bsm_segby                                                                                                                                                              
  SELECT '2024-08-01'::timestamptz + g*interval '1 min', g%4,     
         'k'||lpad(((g*5)%17)::text,3,'0')                                                                                                                                           
  FROM generate_series(0,4379) g;                                                                                                                                                    
  SELECT count(compress_chunk(c)) FROM show_chunks('bsm_segby') c;                                                                                                                   
                                                                                                                                                                                     
  -- Expected 0. Returns 1.                                       
  SELECT count(*) misorder FROM (                                                                                                                                                    
    SELECT name, ts, lag(name) OVER () pn, lag(ts) OVER () pt     
    FROM (SELECT name, ts FROM bsm_segby ORDER BY name, ts) s                                                                                                                        
  ) z WHERE pn IS NOT NULL AND (name<pn OR (name=pn AND ts<pt));                                                                                                                     
                                                                                                                                                                                     
  -- Merge-join variant: XX000.                                                                                                                                                      
  SET enable_hashjoin=off; SET enable_nestloop=off;               
  SET max_parallel_workers_per_gather=0;                                                                                                                                             
  SELECT count(*) FROM (SELECT name, ts FROM bsm_segby ORDER BY name, ts) a                                                                                                          
  JOIN (SELECT name, ts FROM bsm_segby ORDER BY name, ts) b USING (name, ts);                                                                                                        
  -- ERROR: mergejoin input data is out of order                                                                                                                                     

Metadata

Metadata

Labels

bugllm-fuzzerIssue fixed found by llm-fuzzer

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions