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
Overlap detection compared only against the immediately
previous batch's last value. A small intermediate batch
(e.g. a 1-row boundary batch) could reset the comparison
point and hide overlaps with later batches, requiring
multiple compaction passes to converge.
Track the running maximum of last values instead, so all
overlaps within a segment are detected in a single pass.
Uses full-tuple comparison to avoid mixing column values
from different batches in multi-column orderby.
CREATE TABLE metrics_rm_desc (time TIMESTAMPTZ NOT NULL, value float)
1701
+
WITH (tsdb.hypertable, tsdb.orderby='time DESC');
1702
+
NOTICE: using column "time" as partitioning column
1703
+
INSERT INTO metrics_rm_desc SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, i FROM generate_series(1,1000) i;
1704
+
INSERT INTO metrics_rm_desc SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, i FROM generate_series(500,1500) i;
1705
+
INSERT INTO metrics_rm_desc SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, i FROM generate_series(1000,2000) i;
1706
+
INSERT INTO metrics_rm_desc SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, i FROM generate_series(1500,2500) i;
1707
+
SELECT _timescaledb_functions.compact_chunk(chunk) FROM show_chunks('metrics_rm_desc') chunk;
1708
+
compact_chunk
1709
+
------------------------------------------
1710
+
_timescaledb_internal._hyper_17_19_chunk
1711
+
1712
+
SELECT DISTINCT _timescaledb_functions.chunk_status_text(chunk) FROM show_chunks('metrics_rm_desc') chunk;
1713
+
chunk_status_text
1714
+
-------------------
1715
+
{COMPRESSED}
1716
+
1717
+
SELECT count(*) FROM metrics_rm_desc;
1718
+
count
1719
+
-------
1720
+
4003
1721
+
1722
+
DROP TABLE metrics_rm_desc;
1723
+
-- Running max with multi-column orderby and mixed directions.
1724
+
CREATE TABLE metrics_rm_multi (time TIMESTAMPTZ NOT NULL, device TEXT, value float)
1725
+
WITH (tsdb.hypertable, tsdb.orderby='time ASC, value DESC');
1726
+
NOTICE: using column "time" as partitioning column
1727
+
INSERT INTO metrics_rm_multi SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, 'd1', i FROM generate_series(1,1000) i;
1728
+
INSERT INTO metrics_rm_multi SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, 'd1', i FROM generate_series(500,1500) i;
1729
+
INSERT INTO metrics_rm_multi SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, 'd1', i FROM generate_series(1000,2000) i;
1730
+
INSERT INTO metrics_rm_multi SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, 'd1', i FROM generate_series(1500,2500) i;
1731
+
SELECT _timescaledb_functions.compact_chunk(chunk) FROM show_chunks('metrics_rm_multi') chunk;
1732
+
compact_chunk
1733
+
------------------------------------------
1734
+
_timescaledb_internal._hyper_18_20_chunk
1735
+
1736
+
SELECT DISTINCT _timescaledb_functions.chunk_status_text(chunk) FROM show_chunks('metrics_rm_multi') chunk;
1737
+
chunk_status_text
1738
+
-------------------
1739
+
{COMPRESSED}
1740
+
1741
+
SELECT count(*) FROM metrics_rm_multi;
1742
+
count
1743
+
-------
1744
+
4003
1745
+
1746
+
DROP TABLE metrics_rm_multi;
1747
+
-- Running max with segmentby: each segment tracked independently.
1748
+
CREATE TABLE metrics_rm_seg (time TIMESTAMPTZ NOT NULL, device TEXT, value float)
1749
+
WITH (tsdb.hypertable, tsdb.orderby='time', tsdb.segmentby='device');
1750
+
NOTICE: using column "time" as partitioning column
1751
+
-- Same overlapping pattern for two devices.
1752
+
INSERT INTO metrics_rm_seg SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, d, i FROM generate_series(1,1000) i, (VALUES ('d1'), ('d2')) AS v(d);
1753
+
INSERT INTO metrics_rm_seg SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, d, i FROM generate_series(500,1500) i, (VALUES ('d1'), ('d2')) AS v(d);
1754
+
INSERT INTO metrics_rm_seg SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, d, i FROM generate_series(1000,2000) i, (VALUES ('d1'), ('d2')) AS v(d);
1755
+
INSERT INTO metrics_rm_seg SELECT '2025-07-07'::timestamptz + (i || ' minute')::interval, d, i FROM generate_series(1500,2500) i, (VALUES ('d1'), ('d2')) AS v(d);
1756
+
SELECT _timescaledb_functions.compact_chunk(chunk) FROM show_chunks('metrics_rm_seg') chunk;
1757
+
compact_chunk
1758
+
------------------------------------------
1759
+
_timescaledb_internal._hyper_19_21_chunk
1760
+
1761
+
SELECT DISTINCT _timescaledb_functions.chunk_status_text(chunk) FROM show_chunks('metrics_rm_seg') chunk;
0 commit comments