You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When direct-compress writes (INSERT/COPY/cagg refresh) and direct
batch delete record continuous aggregate invalidations, they look
up _ts_meta_min/max metadata columns for the cagg time dimension
to derive the invalidation range. Segmentby columns don't have
those metadata columns (they are stored as scalars, not as
compressed arrays with sparse-index columns), so when the time
column is configured as segmentby the lookup yields NULL/
InvalidAttrNumber and the code crashes:
* row_compressor_flush dereferences a NULL minmax_builder.
* The direct batch delete consumer reads
compressed_datums[-1] (AttrNumberGetAttrOffset(0) = -1).
Detect the segmentby case in both paths and read the value from
the segmentby column directly: every row in the batch shares the
same segmentby value, so it serves as both bounds of the
invalidation range. The remaining "no minmax and not segmentby"
case shouldn't occur in a well-formed configuration; Ensure is
used in row_compressor_flush so the invariant produces a clean
ERROR rather than a crash if it ever does.
0 commit comments