From cecf2f9c01ecc3dbe8edf3ab21131fd8ec3621f8 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:11:41 +0200 Subject: [PATCH] Fix some flakiness in transparent_decompression test (#6892) Add ANALYZE after compression. The plan changes are expected, SeqScans are preferred over IndexScans and Sort over MergeAppend for small tables. --- .../expected/transparent_decompression-14.out | 2463 ++++++++--------- .../expected/transparent_decompression-15.out | 2437 ++++++++-------- .../expected/transparent_decompression-16.out | 2437 ++++++++-------- .../transparent_decompression_query.sql | 52 +- tsl/test/sql/transparent_decompression.sql.in | 40 +- 5 files changed, 3657 insertions(+), 3772 deletions(-) diff --git a/tsl/test/expected/transparent_decompression-14.out b/tsl/test/expected/transparent_decompression-14.out index 88351ab5fd3..a8d9643bfb4 100644 --- a/tsl/test/expected/transparent_decompression-14.out +++ b/tsl/test/expected/transparent_decompression-14.out @@ -35,6 +35,7 @@ SELECT create_hypertable ('metrics', 'time'); ALTER TABLE metrics DROP COLUMN filler_1; +\set INTERVAL 30m INSERT INTO metrics (time, device_id, device_id_peer, v0, v1, v2, v3) SELECT time, device_id, @@ -43,7 +44,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_2; @@ -55,7 +56,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_3; @@ -67,9 +68,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics; +VACUUM ANALYZE metrics; -- create identical hypertable with space partitioning CREATE TABLE metrics_space ( filler_1 int, @@ -99,7 +100,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_2; @@ -111,7 +112,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_3; @@ -123,9 +124,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on uncompressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -133,50 +134,32 @@ ANALYZE metrics_space; \set ECHO none -- compress first and last chunk on the hypertable ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_1_1_chunk'); +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics') x) t +where n in (1, 3) +; compress_chunk ---------------------------------------- _timescaledb_internal._hyper_1_1_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_1_3_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_1_3_chunk -(1 row) +(2 rows) +VACUUM ANALYZE metrics; -- compress some chunks on space partitioned hypertable -- we compress all chunks of first time slice, none of second, and 2 of the last time slice ALTER TABLE metrics_space SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_2_4_chunk'); - compress_chunk ----------------------------------------- +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics_space') x) t +where n in (1, 2, 3, 7, 8) +; + compress_chunk +----------------------------------------- _timescaledb_internal._hyper_2_4_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_5_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_5_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_6_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_6_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_10_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_10_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_11_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_11_chunk -(1 row) +(5 rows) SELECT ht.schema_name || '.' || ht.table_name AS "METRICS_COMPRESSED" FROM _timescaledb_catalog.hypertable ht @@ -194,7 +177,7 @@ FROM _timescaledb_catalog.hypertable ht CREATE INDEX ON metrics_space (device_id, device_id_peer, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id, device_id_peer DESC, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id DESC, device_id_peer DESC, v0, v1 DESC, time); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on compressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -232,7 +215,7 @@ LIMIT 5; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) @@ -259,63 +242,28 @@ SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------------------------------- + Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(17 rows) - --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=2736 loops=1) - Sort Key: metrics."time", metrics.device_id - Presorted Key: metrics."time" - Full-sort Groups: 86 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics (actual rows=2736 loops=1) - Order: metrics."time" - -> Sort (actual rows=720 loops=1) - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1008 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 1512 - -> Sort (actual rows=1008 loops=1) - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) -(21 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(19 rows) -- test empty targetlist :PREFIX @@ -323,11 +271,11 @@ SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -336,19 +284,21 @@ FROM :TEST_TABLE; SELECT * FROM :TEST_TABLE WHERE device_id < 0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------- Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) -(10 rows) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 +(12 rows) -- test targetlist not referencing columns :PREFIX @@ -356,37 +306,74 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------ - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (7 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +------------------------------------------------------------------------------------------------ + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 + -> Seq Scan on _hyper_1_2_chunk (actual rows=1344 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2016 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=672 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 +(16 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test order not present in targetlist :PREFIX @@ -394,41 +381,45 @@ SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------- + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(10 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(12 rows) -- -- test qual pushdown @@ -442,44 +433,32 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=0 loops=1) - Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 - Order: metrics."time", metrics.device_id - Startup Exclusion: false - Runtime Exclusion: false - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id - Sort Method: quicksort -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id - Sort Method: quicksort + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 -(37 rows) +(25 rows) -- device_id constraint should be pushed down :PREFIX @@ -497,7 +476,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -510,6 +489,7 @@ LIMIT 10; Filter: (device_id = 1) (17 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -526,7 +506,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id IS NOT NULL) -> Sort (never executed) @@ -564,7 +544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -582,15 +562,15 @@ WHERE device_id IN (1, 2) ORDER BY time, device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------ + QUERY PLAN +------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics (actual rows=10 loops=1) Order: metrics."time", metrics.device_id -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 3 @@ -621,7 +601,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -659,7 +639,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -684,7 +664,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id_peer < device_id) -> Sort (never executed) @@ -714,7 +694,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 3) Rows Removed by Filter: 4 @@ -745,9 +725,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1440 + Rows Removed by Filter: 2880 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) @@ -769,15 +749,18 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1795 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(6 rows) + Rows Removed by Filter: 3595 + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(9 rows) :PREFIX SELECT * @@ -791,10 +774,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=15 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=30 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1785 + Rows Removed by Filter: 3570 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -811,10 +794,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=20 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=35 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1780 + Rows Removed by Filter: 3565 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -834,9 +817,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1785 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3570 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 30 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -866,9 +849,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -898,9 +881,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -939,9 +922,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (never executed) @@ -973,7 +956,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) Filter: (v0 < device_id) -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id @@ -998,7 +981,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -1039,7 +1022,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -1068,20 +1051,20 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (23 rows) @@ -1107,10 +1090,10 @@ LIMIT 10; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=713 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 @@ -1149,9 +1132,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1784 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3572 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 16 + Rows Removed by Filter: 28 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Sort (never executed) @@ -1183,7 +1166,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) @@ -1211,7 +1194,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Heap Fetches: 0 @@ -1236,7 +1219,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: _hyper_1_2_chunk."time" DESC, _hyper_1_2_chunk.device_id @@ -1262,16 +1245,16 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk."time" DESC Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1279,6 +1262,8 @@ LIMIT 10; -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1287,24 +1272,24 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on public.metrics (actual rows=3915 loops=1) Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 Order: metrics."time", metrics.device_id Startup Exclusion: false Runtime Exclusion: false - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1313,6 +1298,7 @@ ORDER BY time, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (24 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -1325,17 +1311,17 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1366,10 +1352,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk."time" Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1399,10 +1385,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1425,17 +1411,17 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1459,17 +1445,17 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1478,7 +1464,9 @@ ORDER BY device_id, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (17 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1491,16 +1479,16 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time", _hyper_1_2_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1522,17 +1510,17 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1557,16 +1545,16 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1588,23 +1576,24 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=2235 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (15 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -1615,18 +1604,18 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id Chunks excluded during startup: 1 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2235 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) @@ -1641,12 +1630,12 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (10 rows) @@ -1668,17 +1657,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (20 rows) @@ -1699,17 +1688,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (21 rows) @@ -1725,22 +1714,22 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=8640 loops=1) Order: metrics."time" - -> Sort (actual rows=1800 loops=1) + -> Sort (actual rows=3600 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Sort (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1763,46 +1752,50 @@ SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------ + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics."time" = metrics_1."time") - -> Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1368 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1728 loops=1) Order: metrics_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=672 loops=1) Filter: (device_id = 2) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) -(37 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 +(41 rows) -- test prepared statement PREPARE prep AS @@ -1810,58 +1803,60 @@ SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------- Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(14 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(16 rows) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -1879,27 +1874,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1916,27 +1911,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1953,27 +1948,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1989,18 +1984,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -2019,19 +2014,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 @@ -2046,17 +2041,17 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=2520 loops=1) + -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id - Heap Fetches: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) @@ -2064,6 +2059,8 @@ ORDER BY device_id; (15 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -2073,34 +2070,30 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(26 rows) +(21 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2118,7 +2111,7 @@ ORDER BY device_id_peer; -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false @@ -2141,20 +2134,22 @@ WHERE device_id_peer IN ( -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) + Filter: (compress_hyper_5_15_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 +(19 rows) --with multiple values can get a nested loop. :PREFIX_VERBOSE @@ -2165,34 +2160,28 @@ WHERE device_id_peer IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=0 loops=1) + Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=0 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=2) + Join Filter: (_hyper_1_1_chunk.device_id_peer = "*VALUES*".column1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id_peer) - Rows Removed by Filter: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = "*VALUES*".column1) -(27 rows) + -> Materialize (actual rows=2 loops=8640) + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) RESET enable_hashjoin; :PREFIX_VERBOSE @@ -2202,26 +2191,30 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2230,7 +2223,7 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -2240,18 +2233,18 @@ WHERE device_id IN ( Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) @@ -2259,6 +2252,8 @@ WHERE device_id IN ( Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) (27 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -2269,30 +2264,25 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_1_1_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(23 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(18 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -2302,24 +2292,26 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -2329,34 +2321,28 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(27 rows) + -> Hash (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Buckets: 1024 Batches: 1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2379,7 +2365,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2411,7 +2397,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2423,7 +2409,7 @@ FROM :TEST_TABLE m1 -> Append (actual rows=1 loops=10) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) Filter: (m1."time" = "time") - Rows Removed by Filter: 323 + Rows Removed by Filter: 647 -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) Index Cond: (device_id = m1.device_id) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) @@ -2431,7 +2417,7 @@ FROM :TEST_TABLE m1 Filter: (m1.device_id = device_id) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) Filter: (m1."time" = "time") - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) Index Cond: (device_id = m1.device_id) (30 rows) @@ -2446,19 +2432,18 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) - -> Nested Loop (actual rows=10 loops=1) + -> Merge Join (actual rows=10 loops=1) + Merge Cond: (m1."time" = m3_1."time") -> Nested Loop (actual rows=10 loops=1) - Join Filter: (m1."time" = m3_1."time") - Rows Removed by Join Filter: 12304 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2467,32 +2452,41 @@ FROM :TEST_TABLE m1 Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=1231 loops=10) - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Seq Scan on _hyper_1_2_chunk m3_2 (actual rows=504 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: (m1."time" = "time") - Rows Removed by Filter: 323 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: (m1."time" = "time") - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) -(44 rows) + -> Append (actual rows=1 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) + Filter: (m1."time" = "time") + Rows Removed by Filter: 647 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) + Index Cond: (device_id = m1.device_id) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) + Index Cond: ("time" = m1."time") + Filter: (m1.device_id = device_id) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) + Filter: (m1."time" = "time") + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) + Index Cond: (device_id = m1.device_id) + -> Materialize (actual rows=10 loops=1) + -> Merge Append (actual rows=3 loops=1) + Sort Key: m3_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 +(52 rows) :PREFIX SELECT * @@ -2515,7 +2509,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2532,7 +2526,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 4 @@ -2566,7 +2560,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2583,7 +2577,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2611,13 +2605,13 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 37 + Rows Removed by Join Filter: 38 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2626,13 +2620,13 @@ LIMIT 10; Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=47 loops=1) + -> Materialize (actual rows=48 loops=1) -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=11 loops=1) Order: m2."time" -> Sort (actual rows=11 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2652,8 +2646,8 @@ ORDER BY m1.time, m2.time, m2.device_id LIMIT 100; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=100 loops=1) -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id @@ -2668,7 +2662,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2683,17 +2677,18 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) Filter: (device_id = 2) -> Sort (never executed) Sort Key: m2_3."time" -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) - Index Cond: (device_id = 2) -(39 rows) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + Filter: (device_id = 2) +(40 rows) :PREFIX SELECT * @@ -2722,7 +2717,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2749,10 +2744,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2819,7 +2814,7 @@ LIMIT 20; -> Sort (actual rows=5 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2834,7 +2829,7 @@ LIMIT 20; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2870,7 +2865,7 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2885,7 +2880,7 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2911,15 +2906,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) (18 rows) @@ -2935,8 +2930,8 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': AND device_id = $1 LIMIT 1) m1 ON TRUE; :PREFIX EXECUTE param_prep (1); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2944,24 +2939,22 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -(20 rows) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) +(18 rows) :PREFIX EXECUTE param_prep (2); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2969,20 +2962,20 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 2) Rows Removed by Filter: 1 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 (21 rows) EXECUTE param_prep (1); @@ -3144,34 +3137,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -3206,7 +3199,7 @@ LIMIT 5; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3234,111 +3227,45 @@ WHERE device_id = 1 ORDER BY time; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (16 rows) --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics_space (actual rows=2736 loops=1) - Order: metrics_space."time", metrics_space.device_id - -> Merge Append (actual rows=720 loops=1) - Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 - -> Merge Append (actual rows=1008 loops=1) - Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id - Sort Method: quicksort - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=504 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Merge Append (actual rows=1008 loops=1) - Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 -(50 rows) - -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------- - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (15 rows) -- test empty resultset @@ -3385,24 +3312,66 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------- - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (16 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=672 loops=1) + Index Cond: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 +(23 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 @@ -3411,26 +3380,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test order not present in targetlist :PREFIX @@ -3440,26 +3402,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test column with all NULL :PREFIX @@ -3468,13 +3423,13 @@ FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (9 rows) @@ -3499,7 +3454,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3507,7 +3462,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Vectorized Filter: (_hyper_2_5_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) @@ -3515,7 +3470,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Vectorized Filter: (_hyper_2_6_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) @@ -3523,19 +3478,19 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -3543,7 +3498,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) @@ -3551,7 +3506,7 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (61 rows) -- device_id constraint should be pushed down @@ -3570,7 +3525,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3582,6 +3537,7 @@ LIMIT 10; Filter: (device_id = 1) (16 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -3600,19 +3556,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Merge Append (never executed) @@ -3760,13 +3716,13 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) -> Sort (actual rows=5 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 2 @@ -3814,7 +3770,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3872,7 +3828,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -3881,7 +3837,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -3890,7 +3846,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -3915,7 +3871,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) :PREFIX @@ -3935,19 +3891,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Merge Append (never executed) @@ -4006,7 +3962,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (never executed) @@ -4024,8 +3980,8 @@ WHERE device_id = length(substring(version(), 1, 3)) ORDER BY time, device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=10 loops=1) Order: metrics_space."time" @@ -4036,19 +3992,19 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -4071,8 +4027,8 @@ LIMIT 10; -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_21_chunk (never executed) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (never executed) - Index Cond: (device_id = length("substring"(version(), 1, 3))) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (never executed) + Filter: (device_id = length("substring"(version(), 1, 3))) (47 rows) -- @@ -4093,7 +4049,7 @@ LIMIT 10; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_17_chunk.device_id Sort Method: quicksort @@ -4101,7 +4057,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=3 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1077 + Rows Removed by Filter: 2157 -> Sort (actual rows=3 loops=1) Sort Key: compress_hyper_6_18_chunk.device_id Sort Method: quicksort @@ -4109,7 +4065,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_19_chunk.device_id Sort Method: quicksort @@ -4134,25 +4090,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=9 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=18 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1071 + Rows Removed by Filter: 2142 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4174,25 +4130,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=12 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=21 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1068 + Rows Removed by Filter: 2139 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4214,25 +4170,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1071 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2142 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 9 + Rows Removed by Filter: 18 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4294,25 +4250,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4374,25 +4330,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4445,8 +4401,8 @@ WHERE v0 < 1 ORDER BY time, device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=0 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=0 loops=1) Order: metrics_space."time", metrics_space.device_id @@ -4526,9 +4482,10 @@ LIMIT 10; -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=0 loops=1) - Index Cond: (v0 < 1) -(81 rows) + -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + Rows Removed by Filter: 336 +(82 rows) :PREFIX SELECT * @@ -4578,7 +4535,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4587,7 +4544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4596,7 +4553,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4623,7 +4580,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (85 rows) :PREFIX @@ -4643,21 +4600,21 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -4722,21 +4679,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4748,7 +4705,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4757,7 +4714,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4766,7 +4723,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4774,14 +4731,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4791,7 +4748,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown between two order by column (not pushed down) @@ -4814,21 +4771,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4840,7 +4797,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4849,7 +4806,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4858,7 +4815,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4866,14 +4823,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4883,7 +4840,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown of quals on order by and segment by cols anded together @@ -4908,10 +4865,10 @@ LIMIT 10; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=713 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 @@ -4948,27 +4905,27 @@ LIMIT 10; Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - -> Sort (actual rows=6 loops=1) + -> Sort (actual rows=9 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=4 loops=1) + -> Sort (actual rows=2 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Merge Append (never executed) @@ -5031,19 +4988,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -5100,16 +5057,16 @@ LIMIT 10; -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_12_chunk."time" DESC -> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=3 loops=1) - Heap Fetches: 3 + Heap Fetches: 0 -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5157,12 +5114,12 @@ LIMIT 10; -> Sort (actual rows=7 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC, _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC, _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5200,42 +5157,44 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 (36 rows) -- -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5244,42 +5203,43 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -5292,32 +5252,32 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (28 rows) @@ -5343,15 +5303,15 @@ LIMIT 100; -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk."time" Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk."time" Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk."time" Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5377,7 +5337,7 @@ LIMIT 100; -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk."time" Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- test ordering only by segmentby columns @@ -5399,15 +5359,15 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5433,7 +5393,7 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- should produce ordered path @@ -5449,38 +5409,38 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) -- should produce ordered path @@ -5498,41 +5458,43 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5545,38 +5507,38 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time", _hyper_2_7_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5594,18 +5556,18 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5616,7 +5578,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5627,7 +5589,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (36 rows) @@ -5644,38 +5606,38 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5693,31 +5655,32 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _hyper_2_8_chunk (actual rows=1341 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _hyper_2_9_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (23 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -5728,7 +5691,7 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics_space (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=3915 loops=1) Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id @@ -5756,59 +5719,57 @@ ORDER BY time, -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) Rows Removed by Filter: 1 - -> Merge Append (actual rows=1675 loops=1) + -> Merge Append (actual rows=2235 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Sort (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=1005 loops=1) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1341 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -(80 rows) +(78 rows) -- test aggregate :PREFIX @@ -5819,28 +5780,28 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=9 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (25 rows) -- test aggregate with GROUP BY @@ -5861,48 +5822,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (50 rows) -- test window functions with GROUP BY @@ -5922,48 +5883,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (51 rows) SET enable_hashagg = ON; @@ -5978,47 +5939,47 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=8640 loops=1) Order: metrics_space."time" - -> Merge Append (actual rows=1800 loops=1) + -> Merge Append (actual rows=3600 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Merge Append (actual rows=3360 loops=1) Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=336 loops=1) (41 rows) -- test CTE join @@ -6042,40 +6003,40 @@ FROM q1 ORDER BY q1.time; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics_space."time" = metrics_space_1."time") - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1368 loops=1) + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1728 loops=1) Order: metrics_space_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=672 loops=1) Index Cond: (device_id = 2) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -6092,14 +6053,14 @@ WHERE device_id = 1; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (13 rows) @@ -6107,37 +6068,37 @@ WHERE device_id = 1; EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -6155,32 +6116,33 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + Index Cond: (_hyper_2_7_chunk.device_id = 1) + Heap Fetches: 0 + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id = 1) -(25 rows) +(26 rows) -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE @@ -6191,26 +6153,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6227,26 +6189,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics_space), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics_space), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6262,18 +6224,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6292,19 +6254,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 + Heap Fetches: 0 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 @@ -6319,48 +6281,50 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id - Heap Fetches: 504 - -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id - Heap Fetches: 1512 - -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id - Heap Fetches: 504 + Heap Fetches: 0 (39 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -6370,76 +6334,56 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=0 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=0 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 Index Cond: (compress_hyper_6_18_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=0 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 Index Cond: (compress_hyper_6_19_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Filter: (_hyper_2_7_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Filter: (_hyper_2_8_chunk.device_id_peer = 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Filter: (_hyper_2_9_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Index Cond: (_hyper_2_7_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Index Cond: (_hyper_2_8_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Index Cond: (_hyper_2_9_chunk.device_id_peer = 1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=0 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=0 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Index Cond: (compress_hyper_6_21_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) - Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 - Filter: (_hyper_2_12_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 -(68 rows) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) +(47 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6554,10 +6498,10 @@ WHERE device_id_peer IN ( Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk.device_id_peer = 1) Rows Removed by Filter: 3 - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk.device_id_peer - Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) - Heap Fetches: 0 + Filter: (_hyper_2_12_chunk.device_id_peer = 1) + Rows Removed by Filter: 336 (52 rows) --with multiple values can get a nested loop. @@ -6572,42 +6516,42 @@ WHERE device_id_peer IN ( Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_2_4_chunk.device_id_peer Join Filter: (_hyper_2_4_chunk.device_id_peer = "*VALUES*".column1) - Rows Removed by Join Filter: 13680 - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer - -> Materialize (actual rows=2 loops=6840) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6621,17 +6565,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6640,6 +6584,8 @@ WHERE device_id IN ( (16 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6648,50 +6594,52 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Nested Loop Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer - Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Join Filter: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) + Rows Removed by Join Filter: 12096 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - -> Hash (actual rows=2 loops=1) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 (42 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -6702,54 +6650,43 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_2_4_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - Index Cond: (compress_hyper_6_17_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - Index Cond: (compress_hyper_6_18_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - Index Cond: (compress_hyper_6_19_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - Index Cond: (_hyper_2_7_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk + -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - Index Cond: (_hyper_2_8_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk + -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - Index Cond: (_hyper_2_9_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk + -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - Index Cond: (_hyper_2_12_chunk.device_id = "*VALUES*".column1) -(47 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(36 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -6759,17 +6696,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6785,42 +6722,42 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id -> Hash (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6850,7 +6787,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -6884,17 +6821,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -6936,17 +6873,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -7006,17 +6943,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -7053,35 +6990,35 @@ FROM :TEST_TABLE m1 -> Materialize (actual rows=49 loops=1) -> Nested Loop (actual rows=11 loops=1) Join Filter: (m1_1."time" = m3_1."time") - Rows Removed by Join Filter: 13672 + Rows Removed by Join Filter: 17272 -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" -> Sort (actual rows=3 loops=1) Sort Key: m3_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_3 (actual rows=1 loops=1) Filter: (device_id = 3) - -> Materialize (actual rows=4561 loops=3) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=336 loops=1) (88 rows) :PREFIX @@ -7105,7 +7042,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_2 (never executed) @@ -7121,7 +7058,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7155,7 +7092,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -7172,7 +7109,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7200,7 +7137,7 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 40 + Rows Removed by Join Filter: 39 -> Custom Scan (ChunkAppend) on metrics_space m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Merge Append (actual rows=10 loops=1) @@ -7208,17 +7145,17 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -7252,7 +7189,7 @@ LIMIT 10; -> Sort (never executed) Sort Key: m1_9."time", m1_9.device_id -> Seq Scan on _hyper_2_12_chunk m1_9 (never executed) - -> Materialize (actual rows=50 loops=1) + -> Materialize (actual rows=49 loops=1) -> Custom Scan (ChunkAppend) on metrics_space m2 (actual rows=11 loops=1) Order: m2."time" -> Merge Append (actual rows=11 loops=1) @@ -7260,26 +7197,26 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=7 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7332,17 +7269,17 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=61 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=21 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7378,10 +7315,10 @@ LIMIT 100; -> Sort (actual rows=22 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7450,7 +7387,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -7477,10 +7414,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7549,17 +7486,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7585,17 +7522,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7644,17 +7581,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7680,17 +7617,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7727,7 +7664,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 7 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (never executed) @@ -7740,7 +7677,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_4 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m1_5 (never executed) Index Cond: ("time" = g."time") Heap Fetches: 0 @@ -7749,7 +7686,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (never executed) @@ -7781,15 +7718,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 1) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) (18 rows) @@ -7804,15 +7741,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 2) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) (18 rows) @@ -7976,34 +7913,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -8097,26 +8034,26 @@ $$; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Unique (actual rows=0 loops=1) -> Nested Loop (actual rows=0 loops=1) - -> Merge Append (actual rows=6840 loops=1) + -> Merge Append (actual rows=8640 loops=1) Sort Key: d_1.device_id - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=3600 loops=1) -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=3360 loops=1) -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=1680 loops=1) -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk (actual rows=5 loops=1) - -> Limit (actual rows=0 loops=6840) - -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=6840) + -> Limit (actual rows=0 loops=8640) + -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=8640) Order: m."time" DESC Hypertables excluded during runtime: 0 - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) (23 rows) @@ -8186,7 +8123,7 @@ PREPARE tableoid_prep AS SELECT tableoid::regclass FROM :TEST_TABLE WHERE device -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -9808,11 +9745,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -9821,11 +9758,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) diff --git a/tsl/test/expected/transparent_decompression-15.out b/tsl/test/expected/transparent_decompression-15.out index d0bb01ee36d..ba2e2c5ec33 100644 --- a/tsl/test/expected/transparent_decompression-15.out +++ b/tsl/test/expected/transparent_decompression-15.out @@ -35,6 +35,7 @@ SELECT create_hypertable ('metrics', 'time'); ALTER TABLE metrics DROP COLUMN filler_1; +\set INTERVAL 30m INSERT INTO metrics (time, device_id, device_id_peer, v0, v1, v2, v3) SELECT time, device_id, @@ -43,7 +44,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_2; @@ -55,7 +56,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_3; @@ -67,9 +68,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics; +VACUUM ANALYZE metrics; -- create identical hypertable with space partitioning CREATE TABLE metrics_space ( filler_1 int, @@ -99,7 +100,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_2; @@ -111,7 +112,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_3; @@ -123,9 +124,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on uncompressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -133,50 +134,32 @@ ANALYZE metrics_space; \set ECHO none -- compress first and last chunk on the hypertable ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_1_1_chunk'); +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics') x) t +where n in (1, 3) +; compress_chunk ---------------------------------------- _timescaledb_internal._hyper_1_1_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_1_3_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_1_3_chunk -(1 row) +(2 rows) +VACUUM ANALYZE metrics; -- compress some chunks on space partitioned hypertable -- we compress all chunks of first time slice, none of second, and 2 of the last time slice ALTER TABLE metrics_space SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_2_4_chunk'); - compress_chunk ----------------------------------------- +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics_space') x) t +where n in (1, 2, 3, 7, 8) +; + compress_chunk +----------------------------------------- _timescaledb_internal._hyper_2_4_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_5_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_5_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_6_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_6_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_10_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_10_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_11_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_11_chunk -(1 row) +(5 rows) SELECT ht.schema_name || '.' || ht.table_name AS "METRICS_COMPRESSED" FROM _timescaledb_catalog.hypertable ht @@ -194,7 +177,7 @@ FROM _timescaledb_catalog.hypertable ht CREATE INDEX ON metrics_space (device_id, device_id_peer, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id, device_id_peer DESC, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id DESC, device_id_peer DESC, v0, v1 DESC, time); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on compressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -232,7 +215,7 @@ LIMIT 5; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) @@ -259,64 +242,28 @@ SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------------------------------- + Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(17 rows) - --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=2736 loops=1) - Sort Key: metrics."time", metrics.device_id - Presorted Key: metrics."time" - Full-sort Groups: 86 Sort Method: quicksort - -> Result (actual rows=2736 loops=1) - -> Custom Scan (ChunkAppend) on metrics (actual rows=2736 loops=1) - Order: metrics."time" - -> Sort (actual rows=720 loops=1) - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1008 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 1512 - -> Sort (actual rows=1008 loops=1) - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) -(22 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(19 rows) -- test empty targetlist :PREFIX @@ -324,11 +271,11 @@ SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -337,19 +284,21 @@ FROM :TEST_TABLE; SELECT * FROM :TEST_TABLE WHERE device_id < 0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------- Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) -(10 rows) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 +(12 rows) -- test targetlist not referencing columns :PREFIX @@ -357,37 +306,74 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------ - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (7 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +------------------------------------------------------------------------------------------------ + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 + -> Seq Scan on _hyper_1_2_chunk (actual rows=1344 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2016 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=672 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 +(16 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test order not present in targetlist :PREFIX @@ -395,41 +381,45 @@ SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------- + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(10 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(12 rows) -- -- test qual pushdown @@ -443,44 +433,32 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=0 loops=1) - Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 - Order: metrics."time", metrics.device_id - Startup Exclusion: false - Runtime Exclusion: false - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id - Sort Method: quicksort -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id - Sort Method: quicksort + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 -(37 rows) +(25 rows) -- device_id constraint should be pushed down :PREFIX @@ -498,7 +476,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -511,6 +489,7 @@ LIMIT 10; Filter: (device_id = 1) (17 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -527,7 +506,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id IS NOT NULL) -> Sort (never executed) @@ -565,7 +544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -583,15 +562,15 @@ WHERE device_id IN (1, 2) ORDER BY time, device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------ + QUERY PLAN +------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics (actual rows=10 loops=1) Order: metrics."time", metrics.device_id -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 3 @@ -622,7 +601,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -660,7 +639,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -685,7 +664,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id_peer < device_id) -> Sort (never executed) @@ -715,7 +694,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 3) Rows Removed by Filter: 4 @@ -746,9 +725,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1440 + Rows Removed by Filter: 2880 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) @@ -770,15 +749,18 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1795 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(6 rows) + Rows Removed by Filter: 3595 + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(9 rows) :PREFIX SELECT * @@ -792,10 +774,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=15 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=30 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1785 + Rows Removed by Filter: 3570 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -812,10 +794,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=20 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=35 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1780 + Rows Removed by Filter: 3565 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -835,9 +817,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1785 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3570 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 30 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -867,9 +849,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -899,9 +881,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -940,9 +922,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (never executed) @@ -974,7 +956,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) Filter: (v0 < device_id) -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id @@ -999,7 +981,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -1040,7 +1022,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -1069,20 +1051,20 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (23 rows) @@ -1108,10 +1090,10 @@ LIMIT 10; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=713 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 @@ -1150,9 +1132,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1784 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3572 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 16 + Rows Removed by Filter: 28 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Sort (never executed) @@ -1184,7 +1166,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) @@ -1212,7 +1194,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Heap Fetches: 0 @@ -1237,7 +1219,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: _hyper_1_2_chunk."time" DESC, _hyper_1_2_chunk.device_id @@ -1263,16 +1245,16 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk."time" DESC Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1280,6 +1262,8 @@ LIMIT 10; -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1288,24 +1272,24 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on public.metrics (actual rows=3915 loops=1) Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 Order: metrics."time", metrics.device_id Startup Exclusion: false Runtime Exclusion: false - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1314,6 +1298,7 @@ ORDER BY time, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (24 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -1326,17 +1311,17 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1367,10 +1352,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk."time" Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1400,10 +1385,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1426,17 +1411,17 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1460,17 +1445,17 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1479,7 +1464,9 @@ ORDER BY device_id, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (17 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1492,16 +1479,16 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time", _hyper_1_2_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1523,17 +1510,17 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1558,16 +1545,16 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1589,23 +1576,24 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=2235 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (15 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -1616,18 +1604,18 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id Chunks excluded during startup: 1 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2235 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) @@ -1642,12 +1630,12 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (10 rows) @@ -1669,17 +1657,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (20 rows) @@ -1700,17 +1688,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (21 rows) @@ -1726,22 +1714,22 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=8640 loops=1) Order: metrics."time" - -> Sort (actual rows=1800 loops=1) + -> Sort (actual rows=3600 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Sort (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1764,46 +1752,50 @@ SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------ + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics."time" = metrics_1."time") - -> Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1368 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1728 loops=1) Order: metrics_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=672 loops=1) Filter: (device_id = 2) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) -(37 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 +(41 rows) -- test prepared statement PREPARE prep AS @@ -1811,58 +1803,60 @@ SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------- Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(14 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(16 rows) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -1880,27 +1874,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1917,27 +1911,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1954,27 +1948,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1990,18 +1984,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -2020,19 +2014,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 @@ -2047,17 +2041,17 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=2520 loops=1) + -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id - Heap Fetches: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) @@ -2065,6 +2059,8 @@ ORDER BY device_id; (15 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -2074,34 +2070,30 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(26 rows) +(21 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2119,7 +2111,7 @@ ORDER BY device_id_peer; -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false @@ -2142,20 +2134,22 @@ WHERE device_id_peer IN ( -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) + Filter: (compress_hyper_5_15_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 +(19 rows) --with multiple values can get a nested loop. :PREFIX_VERBOSE @@ -2166,34 +2160,28 @@ WHERE device_id_peer IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=0 loops=1) + Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=0 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=2) + Join Filter: (_hyper_1_1_chunk.device_id_peer = "*VALUES*".column1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id_peer) - Rows Removed by Filter: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = "*VALUES*".column1) -(27 rows) + -> Materialize (actual rows=2 loops=8640) + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) RESET enable_hashjoin; :PREFIX_VERBOSE @@ -2203,26 +2191,30 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2231,7 +2223,7 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -2241,18 +2233,18 @@ WHERE device_id IN ( Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) @@ -2260,6 +2252,8 @@ WHERE device_id IN ( Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) (27 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -2270,30 +2264,25 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_1_1_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(23 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(18 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -2303,24 +2292,26 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -2330,34 +2321,28 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(27 rows) + -> Hash (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Buckets: 1024 Batches: 1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2380,7 +2365,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2412,7 +2397,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2424,7 +2409,7 @@ FROM :TEST_TABLE m1 -> Append (actual rows=1 loops=10) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) Filter: (m1."time" = "time") - Rows Removed by Filter: 323 + Rows Removed by Filter: 647 -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) Index Cond: (device_id = m1.device_id) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) @@ -2432,7 +2417,7 @@ FROM :TEST_TABLE m1 Filter: (m1.device_id = device_id) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) Filter: (m1."time" = "time") - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) Index Cond: (device_id = m1.device_id) (30 rows) @@ -2447,19 +2432,18 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) - -> Nested Loop (actual rows=10 loops=1) + -> Merge Join (actual rows=10 loops=1) + Merge Cond: (m1."time" = m3_1."time") -> Nested Loop (actual rows=10 loops=1) - Join Filter: (m1."time" = m3_1."time") - Rows Removed by Join Filter: 12304 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2468,32 +2452,41 @@ FROM :TEST_TABLE m1 Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=1231 loops=10) - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Seq Scan on _hyper_1_2_chunk m3_2 (actual rows=504 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: (m1."time" = "time") - Rows Removed by Filter: 323 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: (m1."time" = "time") - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) -(44 rows) + -> Append (actual rows=1 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) + Filter: (m1."time" = "time") + Rows Removed by Filter: 647 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) + Index Cond: (device_id = m1.device_id) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) + Index Cond: ("time" = m1."time") + Filter: (m1.device_id = device_id) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) + Filter: (m1."time" = "time") + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) + Index Cond: (device_id = m1.device_id) + -> Materialize (actual rows=10 loops=1) + -> Merge Append (actual rows=3 loops=1) + Sort Key: m3_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 +(52 rows) :PREFIX SELECT * @@ -2516,7 +2509,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2533,7 +2526,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 4 @@ -2567,7 +2560,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2584,7 +2577,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2612,13 +2605,13 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 37 + Rows Removed by Join Filter: 38 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2627,13 +2620,13 @@ LIMIT 10; Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=47 loops=1) + -> Materialize (actual rows=48 loops=1) -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=11 loops=1) Order: m2."time" -> Sort (actual rows=11 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2653,8 +2646,8 @@ ORDER BY m1.time, m2.time, m2.device_id LIMIT 100; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=100 loops=1) -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id @@ -2669,7 +2662,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2684,17 +2677,18 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) Filter: (device_id = 2) -> Sort (never executed) Sort Key: m2_3."time" -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) - Index Cond: (device_id = 2) -(39 rows) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + Filter: (device_id = 2) +(40 rows) :PREFIX SELECT * @@ -2723,7 +2717,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2750,10 +2744,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2820,7 +2814,7 @@ LIMIT 20; -> Sort (actual rows=5 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2835,7 +2829,7 @@ LIMIT 20; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2871,7 +2865,7 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2886,7 +2880,7 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2912,15 +2906,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) (18 rows) @@ -2936,8 +2930,8 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': AND device_id = $1 LIMIT 1) m1 ON TRUE; :PREFIX EXECUTE param_prep (1); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2945,24 +2939,22 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -(20 rows) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) +(18 rows) :PREFIX EXECUTE param_prep (2); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2970,20 +2962,20 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 2) Rows Removed by Filter: 1 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 (21 rows) EXECUTE param_prep (1); @@ -3145,34 +3137,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -3207,7 +3199,7 @@ LIMIT 5; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3235,84 +3227,45 @@ WHERE device_id = 1 ORDER BY time; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (16 rows) --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=2736 loops=1) - Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - Sort Method: quicksort - -> Result (actual rows=2736 loops=1) - -> Append (actual rows=2736 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=504 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 -(23 rows) - -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------- - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (15 rows) -- test empty resultset @@ -3359,24 +3312,66 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------- - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (16 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=672 loops=1) + Index Cond: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 +(23 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 @@ -3385,26 +3380,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test order not present in targetlist :PREFIX @@ -3414,26 +3402,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test column with all NULL :PREFIX @@ -3442,13 +3423,13 @@ FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (9 rows) @@ -3473,7 +3454,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3481,7 +3462,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Vectorized Filter: (_hyper_2_5_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) @@ -3489,7 +3470,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Vectorized Filter: (_hyper_2_6_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) @@ -3497,19 +3478,19 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -3517,7 +3498,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) @@ -3525,7 +3506,7 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (61 rows) -- device_id constraint should be pushed down @@ -3544,7 +3525,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3556,6 +3537,7 @@ LIMIT 10; Filter: (device_id = 1) (16 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -3574,19 +3556,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Merge Append (never executed) @@ -3734,13 +3716,13 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) -> Sort (actual rows=5 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 2 @@ -3788,7 +3770,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3846,7 +3828,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -3855,7 +3837,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -3864,7 +3846,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -3889,7 +3871,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) :PREFIX @@ -3909,19 +3891,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Merge Append (never executed) @@ -3980,7 +3962,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (never executed) @@ -3998,8 +3980,8 @@ WHERE device_id = length(substring(version(), 1, 3)) ORDER BY time, device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=10 loops=1) Order: metrics_space."time" @@ -4010,19 +3992,19 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -4045,8 +4027,8 @@ LIMIT 10; -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_21_chunk (never executed) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (never executed) - Index Cond: (device_id = length("substring"(version(), 1, 3))) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (never executed) + Filter: (device_id = length("substring"(version(), 1, 3))) (47 rows) -- @@ -4067,7 +4049,7 @@ LIMIT 10; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_17_chunk.device_id Sort Method: quicksort @@ -4075,7 +4057,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=3 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1077 + Rows Removed by Filter: 2157 -> Sort (actual rows=3 loops=1) Sort Key: compress_hyper_6_18_chunk.device_id Sort Method: quicksort @@ -4083,7 +4065,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_19_chunk.device_id Sort Method: quicksort @@ -4108,25 +4090,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=9 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=18 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1071 + Rows Removed by Filter: 2142 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4148,25 +4130,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=12 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=21 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1068 + Rows Removed by Filter: 2139 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4188,25 +4170,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1071 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2142 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 9 + Rows Removed by Filter: 18 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4268,25 +4250,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4348,25 +4330,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4419,8 +4401,8 @@ WHERE v0 < 1 ORDER BY time, device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=0 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=0 loops=1) Order: metrics_space."time", metrics_space.device_id @@ -4500,9 +4482,10 @@ LIMIT 10; -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=0 loops=1) - Index Cond: (v0 < 1) -(81 rows) + -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + Rows Removed by Filter: 336 +(82 rows) :PREFIX SELECT * @@ -4552,7 +4535,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4561,7 +4544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4570,7 +4553,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4597,7 +4580,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (85 rows) :PREFIX @@ -4617,21 +4600,21 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -4696,21 +4679,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4722,7 +4705,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4731,7 +4714,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4740,7 +4723,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4748,14 +4731,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4765,7 +4748,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown between two order by column (not pushed down) @@ -4788,21 +4771,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4814,7 +4797,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4823,7 +4806,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4832,7 +4815,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4840,14 +4823,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4857,7 +4840,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown of quals on order by and segment by cols anded together @@ -4882,10 +4865,10 @@ LIMIT 10; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=713 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 @@ -4922,27 +4905,27 @@ LIMIT 10; Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - -> Sort (actual rows=6 loops=1) + -> Sort (actual rows=9 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=4 loops=1) + -> Sort (actual rows=2 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Merge Append (never executed) @@ -5005,19 +4988,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -5074,16 +5057,16 @@ LIMIT 10; -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_12_chunk."time" DESC -> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=3 loops=1) - Heap Fetches: 3 + Heap Fetches: 0 -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5131,12 +5114,12 @@ LIMIT 10; -> Sort (actual rows=7 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC, _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC, _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5174,42 +5157,44 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 (36 rows) -- -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5218,42 +5203,43 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -5266,32 +5252,32 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (28 rows) @@ -5317,15 +5303,15 @@ LIMIT 100; -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk."time" Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk."time" Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk."time" Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5351,7 +5337,7 @@ LIMIT 100; -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk."time" Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- test ordering only by segmentby columns @@ -5373,15 +5359,15 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5407,7 +5393,7 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- should produce ordered path @@ -5423,38 +5409,38 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) -- should produce ordered path @@ -5472,41 +5458,43 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5519,38 +5507,38 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time", _hyper_2_7_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5568,18 +5556,18 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5590,7 +5578,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5601,7 +5589,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (36 rows) @@ -5618,38 +5606,38 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5667,31 +5655,32 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _hyper_2_8_chunk (actual rows=1341 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _hyper_2_9_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (23 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -5702,7 +5691,7 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics_space (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=3915 loops=1) Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id @@ -5730,59 +5719,57 @@ ORDER BY time, -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) Rows Removed by Filter: 1 - -> Merge Append (actual rows=1675 loops=1) + -> Merge Append (actual rows=2235 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Sort (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=1005 loops=1) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1341 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -(80 rows) +(78 rows) -- test aggregate :PREFIX @@ -5793,28 +5780,28 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=9 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (25 rows) -- test aggregate with GROUP BY @@ -5835,48 +5822,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (50 rows) -- test window functions with GROUP BY @@ -5896,48 +5883,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (51 rows) SET enable_hashagg = ON; @@ -5952,47 +5939,47 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=8640 loops=1) Order: metrics_space."time" - -> Merge Append (actual rows=1800 loops=1) + -> Merge Append (actual rows=3600 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Merge Append (actual rows=3360 loops=1) Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=336 loops=1) (41 rows) -- test CTE join @@ -6016,40 +6003,40 @@ FROM q1 ORDER BY q1.time; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics_space."time" = metrics_space_1."time") - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1368 loops=1) + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1728 loops=1) Order: metrics_space_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=672 loops=1) Index Cond: (device_id = 2) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -6066,14 +6053,14 @@ WHERE device_id = 1; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (13 rows) @@ -6081,37 +6068,37 @@ WHERE device_id = 1; EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -6129,32 +6116,33 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + Index Cond: (_hyper_2_7_chunk.device_id = 1) + Heap Fetches: 0 + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id = 1) -(25 rows) +(26 rows) -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE @@ -6165,26 +6153,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6201,26 +6189,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics_space), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics_space), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6236,18 +6224,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6266,19 +6254,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 + Heap Fetches: 0 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 @@ -6293,48 +6281,50 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id - Heap Fetches: 504 - -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id - Heap Fetches: 1512 - -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id - Heap Fetches: 504 + Heap Fetches: 0 (39 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -6344,76 +6334,56 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=0 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=0 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 Index Cond: (compress_hyper_6_18_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=0 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 Index Cond: (compress_hyper_6_19_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Filter: (_hyper_2_7_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Filter: (_hyper_2_8_chunk.device_id_peer = 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Filter: (_hyper_2_9_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Index Cond: (_hyper_2_7_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Index Cond: (_hyper_2_8_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Index Cond: (_hyper_2_9_chunk.device_id_peer = 1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=0 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=0 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Index Cond: (compress_hyper_6_21_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) - Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 - Filter: (_hyper_2_12_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 -(68 rows) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) +(47 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6528,10 +6498,10 @@ WHERE device_id_peer IN ( Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk.device_id_peer = 1) Rows Removed by Filter: 3 - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk.device_id_peer - Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) - Heap Fetches: 0 + Filter: (_hyper_2_12_chunk.device_id_peer = 1) + Rows Removed by Filter: 336 (52 rows) --with multiple values can get a nested loop. @@ -6546,42 +6516,42 @@ WHERE device_id_peer IN ( Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_2_4_chunk.device_id_peer Join Filter: (_hyper_2_4_chunk.device_id_peer = "*VALUES*".column1) - Rows Removed by Join Filter: 13680 - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer - -> Materialize (actual rows=2 loops=6840) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6595,17 +6565,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6614,6 +6584,8 @@ WHERE device_id IN ( (16 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6622,50 +6594,52 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Nested Loop Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer - Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Join Filter: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) + Rows Removed by Join Filter: 12096 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - -> Hash (actual rows=2 loops=1) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 (42 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -6676,54 +6650,43 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_2_4_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - Index Cond: (compress_hyper_6_17_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - Index Cond: (compress_hyper_6_18_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - Index Cond: (compress_hyper_6_19_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - Index Cond: (_hyper_2_7_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk + -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - Index Cond: (_hyper_2_8_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk + -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - Index Cond: (_hyper_2_9_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk + -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - Index Cond: (_hyper_2_12_chunk.device_id = "*VALUES*".column1) -(47 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(36 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -6733,17 +6696,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6759,42 +6722,42 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id -> Hash (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6824,7 +6787,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -6858,17 +6821,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -6910,17 +6873,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -6980,17 +6943,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -7027,35 +6990,35 @@ FROM :TEST_TABLE m1 -> Materialize (actual rows=49 loops=1) -> Nested Loop (actual rows=11 loops=1) Join Filter: (m1_1."time" = m3_1."time") - Rows Removed by Join Filter: 13672 + Rows Removed by Join Filter: 17272 -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" -> Sort (actual rows=3 loops=1) Sort Key: m3_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_3 (actual rows=1 loops=1) Filter: (device_id = 3) - -> Materialize (actual rows=4561 loops=3) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=336 loops=1) (88 rows) :PREFIX @@ -7079,7 +7042,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_2 (never executed) @@ -7095,7 +7058,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7129,7 +7092,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -7146,7 +7109,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7174,7 +7137,7 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 40 + Rows Removed by Join Filter: 39 -> Custom Scan (ChunkAppend) on metrics_space m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Merge Append (actual rows=10 loops=1) @@ -7182,17 +7145,17 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -7226,7 +7189,7 @@ LIMIT 10; -> Sort (never executed) Sort Key: m1_9."time", m1_9.device_id -> Seq Scan on _hyper_2_12_chunk m1_9 (never executed) - -> Materialize (actual rows=50 loops=1) + -> Materialize (actual rows=49 loops=1) -> Custom Scan (ChunkAppend) on metrics_space m2 (actual rows=11 loops=1) Order: m2."time" -> Merge Append (actual rows=11 loops=1) @@ -7234,26 +7197,26 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=7 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7306,17 +7269,17 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=61 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=21 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7352,10 +7315,10 @@ LIMIT 100; -> Sort (actual rows=22 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7424,7 +7387,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -7451,10 +7414,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7523,17 +7486,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7559,17 +7522,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7618,17 +7581,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7654,17 +7617,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7701,7 +7664,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 7 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (never executed) @@ -7714,7 +7677,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_4 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m1_5 (never executed) Index Cond: ("time" = g."time") Heap Fetches: 0 @@ -7723,7 +7686,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (never executed) @@ -7755,15 +7718,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 1) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) (18 rows) @@ -7778,15 +7741,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 2) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) (18 rows) @@ -7950,34 +7913,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -8071,26 +8034,26 @@ $$; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Unique (actual rows=0 loops=1) -> Nested Loop (actual rows=0 loops=1) - -> Merge Append (actual rows=6840 loops=1) + -> Merge Append (actual rows=8640 loops=1) Sort Key: d_1.device_id - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=3600 loops=1) -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=3360 loops=1) -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=1680 loops=1) -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk (actual rows=5 loops=1) - -> Limit (actual rows=0 loops=6840) - -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=6840) + -> Limit (actual rows=0 loops=8640) + -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=8640) Order: m."time" DESC Hypertables excluded during runtime: 0 - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) (23 rows) @@ -8161,7 +8124,7 @@ PREPARE tableoid_prep AS SELECT tableoid::regclass FROM :TEST_TABLE WHERE device -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -9783,11 +9746,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -9796,11 +9759,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) diff --git a/tsl/test/expected/transparent_decompression-16.out b/tsl/test/expected/transparent_decompression-16.out index 9d14ff7b9a1..3eca32459dd 100644 --- a/tsl/test/expected/transparent_decompression-16.out +++ b/tsl/test/expected/transparent_decompression-16.out @@ -35,6 +35,7 @@ SELECT create_hypertable ('metrics', 'time'); ALTER TABLE metrics DROP COLUMN filler_1; +\set INTERVAL 30m INSERT INTO metrics (time, device_id, device_id_peer, v0, v1, v2, v3) SELECT time, device_id, @@ -43,7 +44,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_2; @@ -55,7 +56,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics DROP COLUMN filler_3; @@ -67,9 +68,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics; +VACUUM ANALYZE metrics; -- create identical hypertable with space partitioning CREATE TABLE metrics_space ( filler_1 int, @@ -99,7 +100,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_2; @@ -111,7 +112,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space DROP COLUMN filler_3; @@ -123,9 +124,9 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on uncompressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -133,50 +134,32 @@ ANALYZE metrics_space; \set ECHO none -- compress first and last chunk on the hypertable ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_1_1_chunk'); +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics') x) t +where n in (1, 3) +; compress_chunk ---------------------------------------- _timescaledb_internal._hyper_1_1_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_1_3_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_1_3_chunk -(1 row) +(2 rows) +VACUUM ANALYZE metrics; -- compress some chunks on space partitioned hypertable -- we compress all chunks of first time slice, none of second, and 2 of the last time slice ALTER TABLE metrics_space SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_2_4_chunk'); - compress_chunk ----------------------------------------- +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics_space') x) t +where n in (1, 2, 3, 7, 8) +; + compress_chunk +----------------------------------------- _timescaledb_internal._hyper_2_4_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_5_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_5_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_6_chunk'); - compress_chunk ----------------------------------------- _timescaledb_internal._hyper_2_6_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_10_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_10_chunk -(1 row) - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_11_chunk'); - compress_chunk ------------------------------------------ _timescaledb_internal._hyper_2_11_chunk -(1 row) +(5 rows) SELECT ht.schema_name || '.' || ht.table_name AS "METRICS_COMPRESSED" FROM _timescaledb_catalog.hypertable ht @@ -194,7 +177,7 @@ FROM _timescaledb_catalog.hypertable ht CREATE INDEX ON metrics_space (device_id, device_id_peer, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id, device_id_peer DESC, v0, v1 DESC, time); CREATE INDEX ON metrics_space (device_id DESC, device_id_peer DESC, v0, v1 DESC, time); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on compressed hypertable and store result \set PREFIX '' \set PREFIX_VERBOSE '' @@ -232,7 +215,7 @@ LIMIT 5; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) @@ -259,64 +242,28 @@ SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------------------------------- + Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(17 rows) - --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=2736 loops=1) - Sort Key: metrics."time", metrics.device_id - Presorted Key: metrics."time" - Full-sort Groups: 86 Sort Method: quicksort - -> Result (actual rows=2736 loops=1) - -> Custom Scan (ChunkAppend) on metrics (actual rows=2736 loops=1) - Order: metrics."time" - -> Sort (actual rows=720 loops=1) - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1008 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 1512 - -> Sort (actual rows=1008 loops=1) - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=2 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) -(22 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(19 rows) -- test empty targetlist :PREFIX @@ -324,11 +271,11 @@ SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -337,19 +284,21 @@ FROM :TEST_TABLE; SELECT * FROM :TEST_TABLE WHERE device_id < 0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------- Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=0 loops=1) - Index Cond: (device_id < 0) -(10 rows) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=0 loops=1) + Filter: (device_id < 0) + Rows Removed by Filter: 5 +(12 rows) -- test targetlist not referencing columns :PREFIX @@ -357,37 +306,74 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------ - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (7 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +------------------------------------------------------------------------------------------------ + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 + -> Seq Scan on _hyper_1_2_chunk (actual rows=1344 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2016 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=672 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=2 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 3 +(16 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test order not present in targetlist :PREFIX @@ -395,41 +381,45 @@ SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=1368 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------------- + Sort (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk.v1 Sort Method: quicksort - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(13 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(15 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + QUERY PLAN +----------------------------------------------------------------------------------- + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(10 rows) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(12 rows) -- -- test qual pushdown @@ -443,44 +433,32 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=0 loops=1) - Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 - Order: metrics."time", metrics.device_id - Startup Exclusion: false - Runtime Exclusion: false - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 + Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id - Sort Method: quicksort -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id - Sort Method: quicksort + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 Batches Removed by Filter: 5 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 -(37 rows) +(25 rows) -- device_id constraint should be pushed down :PREFIX @@ -498,7 +476,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -511,6 +489,7 @@ LIMIT 10; Filter: (device_id = 1) (17 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -527,7 +506,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id IS NOT NULL) -> Sort (never executed) @@ -565,7 +544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -583,15 +562,15 @@ WHERE device_id IN (1, 2) ORDER BY time, device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------ + QUERY PLAN +------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics (actual rows=10 loops=1) Order: metrics."time", metrics.device_id -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1440 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=2 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 3 @@ -622,7 +601,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -660,7 +639,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -685,7 +664,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (device_id_peer < device_id) -> Sort (never executed) @@ -715,7 +694,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 3) Rows Removed by Filter: 4 @@ -746,9 +725,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1440 + Rows Removed by Filter: 2880 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) @@ -770,15 +749,18 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1795 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(6 rows) + Rows Removed by Filter: 3595 + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(9 rows) :PREFIX SELECT * @@ -792,10 +774,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=15 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=30 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1785 + Rows Removed by Filter: 3570 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -812,10 +794,10 @@ LIMIT 10; Limit (actual rows=10 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=20 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=35 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1780 + Rows Removed by Filter: 3565 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -835,9 +817,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1785 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3570 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 30 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -867,9 +849,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -899,9 +881,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1780 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3565 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 20 + Rows Removed by Filter: 35 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (never executed) @@ -940,9 +922,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (never executed) @@ -974,7 +956,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) Filter: (v0 < device_id) -> Sort (never executed) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id @@ -999,7 +981,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -1040,7 +1022,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort @@ -1069,20 +1051,20 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 1800 + Rows Removed by Filter: 3600 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort -> Seq Scan on _hyper_1_2_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 1680 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (23 rows) @@ -1108,10 +1090,10 @@ LIMIT 10; Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=713 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Vectorized Filter: (_hyper_1_1_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 @@ -1150,9 +1132,9 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1784 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3572 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 16 + Rows Removed by Filter: 28 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Sort (never executed) @@ -1184,7 +1166,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) @@ -1212,7 +1194,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (never executed) Heap Fetches: 0 @@ -1237,7 +1219,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC, _hyper_1_3_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: _hyper_1_2_chunk."time" DESC, _hyper_1_2_chunk.device_id @@ -1263,16 +1245,16 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk."time" DESC Sort Method: top-N heapsort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1280,6 +1262,8 @@ LIMIT 10; -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1288,24 +1272,24 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on public.metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on public.metrics (actual rows=3915 loops=1) Output: metrics."time", metrics.device_id, metrics.device_id_peer, metrics.v0, metrics.v1, metrics.v2, metrics.v3 Order: metrics."time", metrics.device_id Startup Exclusion: false Runtime Exclusion: false - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1314,6 +1298,7 @@ ORDER BY time, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (24 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -1326,17 +1311,17 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1367,10 +1352,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk."time" Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1400,10 +1385,10 @@ LIMIT 100; Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Sort Method: top-N heapsort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 + Rows Removed by Filter: 1125 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -1426,17 +1411,17 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1460,17 +1445,17 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1479,7 +1464,9 @@ ORDER BY device_id, Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (17 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -1492,16 +1479,16 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time", _hyper_1_2_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1523,17 +1510,17 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1558,16 +1545,16 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Sort Key: _hyper_1_2_chunk.device_id DESC, _hyper_1_2_chunk.device_id_peer DESC, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=1675 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=2235 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -1589,23 +1576,24 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=2235 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 845 - -> Sort (actual rows=2520 loops=1) + Rows Removed by Filter: 1125 + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (15 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -1616,18 +1604,18 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics (actual rows=3915 loops=1) Order: metrics."time", metrics.device_id Chunks excluded during startup: 1 - -> Sort (actual rows=1675 loops=1) + -> Sort (actual rows=2235 loops=1) Sort Key: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=1675 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2235 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) @@ -1642,12 +1630,12 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (10 rows) @@ -1669,17 +1657,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (20 rows) @@ -1700,17 +1688,17 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id - -> Sort (actual rows=2520 loops=1) + -> Sort (actual rows=3360 loops=1) Sort Key: _hyper_1_2_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_3_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) (21 rows) @@ -1726,22 +1714,22 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------ - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=8640 loops=1) Order: metrics."time" - -> Sort (actual rows=1800 loops=1) + -> Sort (actual rows=3600 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Sort (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Sort (actual rows=1680 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (17 rows) @@ -1764,46 +1752,50 @@ SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------ + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics."time" = metrics_1."time") - -> Custom Scan (ChunkAppend) on metrics (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics (actual rows=1728 loops=1) Order: metrics."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1368 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics metrics_1 (actual rows=1728 loops=1) Order: metrics_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_1_1_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk _hyper_1_1_chunk_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk _hyper_1_2_chunk_1 (actual rows=672 loops=1) Filter: (device_id = 2) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_1_3_chunk_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) -(37 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk _hyper_1_3_chunk_1 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 +(41 rows) -- test prepared statement PREPARE prep AS @@ -1811,58 +1803,60 @@ SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------- Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=1) - Index Cond: (device_id = 1) -(14 rows) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) + Filter: (device_id = 1) + Rows Removed by Filter: 4 +(16 rows) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -1880,27 +1874,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1917,27 +1911,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Sort Key: _hyper_1_3_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1954,27 +1948,27 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - Rows Removed by Filter: 2016 - -> Sort (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -1990,18 +1984,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) @@ -2020,19 +2014,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 + Rows Removed by Filter: 2688 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 @@ -2047,17 +2041,17 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_1_1_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=2520 loops=1) + -> Index Only Scan using _hyper_1_2_chunk_tmp_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id - Heap Fetches: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=2520 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) @@ -2065,6 +2059,8 @@ ORDER BY device_id; (15 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -2074,34 +2070,30 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(26 rows) +(21 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2119,7 +2111,7 @@ ORDER BY device_id_peer; -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false @@ -2142,20 +2134,22 @@ WHERE device_id_peer IN ( -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) + Filter: (compress_hyper_5_15_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 + Rows Removed by Filter: 3360 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id_peer = 1) + Rows Removed by Filter: 5 +(19 rows) --with multiple values can get a nested loop. :PREFIX_VERBOSE @@ -2166,34 +2160,28 @@ WHERE device_id_peer IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=0 loops=1) + Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=0 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=2) + Join Filter: (_hyper_1_1_chunk.device_id_peer = "*VALUES*".column1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id_peer = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id_peer) - Rows Removed by Filter: 2520 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id_peer = "*VALUES*".column1) -(27 rows) + -> Materialize (actual rows=2 loops=8640) + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) RESET enable_hashjoin; :PREFIX_VERBOSE @@ -2203,26 +2191,30 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -2231,7 +2223,7 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -2241,18 +2233,18 @@ WHERE device_id IN ( Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) @@ -2260,6 +2252,8 @@ WHERE device_id IN ( Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) (27 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -2270,30 +2264,25 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_1_1_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(23 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(18 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -2303,24 +2292,26 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=1) Output: _hyper_1_1_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1) + Filter: (compress_hyper_5_15_chunk.device_id = 1) + Rows Removed by Filter: 4 + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=1) Output: _hyper_1_2_chunk.device_id_peer Filter: (_hyper_1_2_chunk.device_id = 1) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=1) Output: _hyper_1_3_chunk.device_id_peer Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = 1) -(17 rows) + Filter: (compress_hyper_5_16_chunk.device_id = 1) + Rows Removed by Filter: 4 +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -2330,34 +2321,28 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - -> Unique (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Sort (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - Sort Method: quicksort - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 - -> Append (actual rows=1368 loops=2) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2) + Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) -(27 rows) + -> Hash (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Buckets: 1024 Batches: 1 + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 +(21 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2380,7 +2365,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_1_3_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2412,7 +2397,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2424,7 +2409,7 @@ FROM :TEST_TABLE m1 -> Append (actual rows=1 loops=10) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) Filter: ("time" = m1."time") - Rows Removed by Filter: 323 + Rows Removed by Filter: 647 -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) Index Cond: (device_id = m1.device_id) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) @@ -2432,7 +2417,7 @@ FROM :TEST_TABLE m1 Filter: (m1.device_id = device_id) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) Filter: ("time" = m1."time") - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) Index Cond: (device_id = m1.device_id) (30 rows) @@ -2447,19 +2432,18 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) - -> Nested Loop (actual rows=10 loops=1) + -> Merge Join (actual rows=10 loops=1) + Merge Cond: (m1."time" = m3_1."time") -> Nested Loop (actual rows=10 loops=1) - Join Filter: (m1."time" = m3_1."time") - Rows Removed by Join Filter: 12304 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2468,32 +2452,41 @@ FROM :TEST_TABLE m1 Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=1231 loops=10) - -> Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Seq Scan on _hyper_1_2_chunk m3_2 (actual rows=504 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2016 - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=504 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Index Cond: (device_id = 3) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: ("time" = m1."time") - Rows Removed by Filter: 323 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: ("time" = m1."time") - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) -(44 rows) + -> Append (actual rows=1 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) + Filter: ("time" = m1."time") + Rows Removed by Filter: 647 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) + Index Cond: (device_id = m1.device_id) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) + Index Cond: ("time" = m1."time") + Filter: (m1.device_id = device_id) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) + Filter: ("time" = m1."time") + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) + Index Cond: (device_id = m1.device_id) + -> Materialize (actual rows=10 loops=1) + -> Merge Append (actual rows=3 loops=1) + Sort Key: m3_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 +(52 rows) :PREFIX SELECT * @@ -2516,7 +2509,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2533,7 +2526,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 4 @@ -2567,7 +2560,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -2584,7 +2577,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2612,13 +2605,13 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 37 + Rows Removed by Join Filter: 38 -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Sort (actual rows=10 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2627,13 +2620,13 @@ LIMIT 10; Sort Key: m1_3."time", m1_3.device_id -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Materialize (actual rows=47 loops=1) + -> Materialize (actual rows=48 loops=1) -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=11 loops=1) Order: m2."time" -> Sort (actual rows=11 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2653,8 +2646,8 @@ ORDER BY m1.time, m2.time, m2.device_id LIMIT 100; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=100 loops=1) -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id @@ -2669,7 +2662,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2684,17 +2677,18 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=360 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) - Index Cond: (device_id = 2) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 4 -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) Filter: (device_id = 2) -> Sort (never executed) Sort Key: m2_3."time" -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) - Index Cond: (device_id = 2) -(39 rows) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + Filter: (device_id = 2) +(40 rows) :PREFIX SELECT * @@ -2723,7 +2717,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2750,10 +2744,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -2820,7 +2814,7 @@ LIMIT 20; -> Sort (actual rows=5 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2835,7 +2829,7 @@ LIMIT 20; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2871,7 +2865,7 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -2886,7 +2880,7 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (never executed) -> Sort (never executed) @@ -2912,15 +2906,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) (18 rows) @@ -2936,8 +2930,8 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': AND device_id = $1 LIMIT 1) m1 ON TRUE; :PREFIX EXECUTE param_prep (1); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2945,24 +2939,22 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 1) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -(20 rows) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) +(18 rows) :PREFIX EXECUTE param_prep (2); - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------- Nested Loop (actual rows=19 loops=1) -> Function Scan on generate_series g (actual rows=32 loops=1) -> Limit (actual rows=1 loops=32) @@ -2970,20 +2962,20 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=5) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 336 + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=5) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m1_2 (actual rows=1 loops=7) Index Cond: ("time" = g."time") Filter: (device_id = 2) Rows Removed by Filter: 1 -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=7) - Index Cond: (device_id = 2) - Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) + Rows Removed by Filter: 160 + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=1 loops=7) + Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) + Rows Removed by Filter: 1 (21 rows) EXECUTE param_prep (1); @@ -3145,34 +3137,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -3207,7 +3199,7 @@ LIMIT 5; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3235,84 +3227,45 @@ WHERE device_id = 1 ORDER BY time; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- - Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (16 rows) --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=2736 loops=1) - Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - Sort Method: quicksort - -> Result (actual rows=2736 loops=1) - -> Append (actual rows=2736 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=504 loops=1) - Index Cond: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 -(23 rows) - -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------- - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (15 rows) -- test empty resultset @@ -3359,24 +3312,66 @@ SELECT 1 FROM :TEST_TABLE; QUERY PLAN ------------------------------------------------------------------------------------------- - Result (actual rows=6840 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Result (actual rows=8640 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (16 rows) +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=3456 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=3456 loops=1) + -> Append (actual rows=3456 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=672 loops=1) + Index Cond: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 +(23 rows) + -- test constraints not present in targetlist :PREFIX SELECT v1 @@ -3385,26 +3380,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test order not present in targetlist :PREFIX @@ -3414,26 +3402,19 @@ WHERE device_id = 1 ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------ - Merge Append (actual rows=1368 loops=1) + Sort (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk.v1 - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Sort Method: quicksort + -> Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_7_chunk.v1 - Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk.v1 - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -(19 rows) +(12 rows) -- test column with all NULL :PREFIX @@ -3442,13 +3423,13 @@ FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (9 rows) @@ -3473,7 +3454,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -3481,7 +3462,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Vectorized Filter: (_hyper_2_5_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) @@ -3489,7 +3470,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Vectorized Filter: (_hyper_2_6_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) @@ -3497,19 +3478,19 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 Batches Removed by Filter: 1 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -3517,7 +3498,7 @@ ORDER BY time, -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 Batches Removed by Filter: 3 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) @@ -3525,7 +3506,7 @@ ORDER BY time, -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (61 rows) -- device_id constraint should be pushed down @@ -3544,7 +3525,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3556,6 +3537,7 @@ LIMIT 10; Filter: (device_id = 1) (16 rows) +RESET enable_sort; -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -3574,19 +3556,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id IS NOT NULL) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id IS NOT NULL) -> Merge Append (never executed) @@ -3734,13 +3716,13 @@ LIMIT 10; -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) -> Sort (actual rows=5 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) Rows Removed by Filter: 2 @@ -3788,7 +3770,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -3846,7 +3828,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -3855,7 +3837,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -3864,7 +3846,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -3889,7 +3871,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (device_id = device_id_peer) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) :PREFIX @@ -3909,19 +3891,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (device_id_peer < device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id_peer < device_id) -> Merge Append (never executed) @@ -3980,7 +3962,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (never executed) @@ -3998,8 +3980,8 @@ WHERE device_id = length(substring(version(), 1, 3)) ORDER BY time, device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=10 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=10 loops=1) Order: metrics_space."time" @@ -4010,19 +3992,19 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -4045,8 +4027,8 @@ LIMIT 10; -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (never executed) Filter: (device_id = length("substring"(version(), 1, 3))) -> Seq Scan on compress_hyper_6_21_chunk (never executed) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (never executed) - Index Cond: (device_id = length("substring"(version(), 1, 3))) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (never executed) + Filter: (device_id = length("substring"(version(), 1, 3))) (47 rows) -- @@ -4067,7 +4049,7 @@ LIMIT 10; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_17_chunk.device_id Sort Method: quicksort @@ -4075,7 +4057,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=3 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1077 + Rows Removed by Filter: 2157 -> Sort (actual rows=3 loops=1) Sort Key: compress_hyper_6_18_chunk.device_id Sort Method: quicksort @@ -4083,7 +4065,7 @@ LIMIT 10; Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=1 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 359 + Rows Removed by Filter: 719 -> Sort (actual rows=1 loops=1) Sort Key: compress_hyper_6_19_chunk.device_id Sort Method: quicksort @@ -4108,25 +4090,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=9 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=18 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1071 + Rows Removed by Filter: 2142 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=3 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=6 loops=1) Vectorized Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 357 + Rows Removed by Filter: 714 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4148,25 +4130,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=12 loops=1) + Sort Method: top-N heapsort + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=21 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 1068 + Rows Removed by Filter: 2139 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=7 loops=1) Vectorized Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 356 + Rows Removed by Filter: 713 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (29 rows) @@ -4188,25 +4170,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1071 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2142 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 9 + Rows Removed by Filter: 18 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=357 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=714 loops=1) Vectorized Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 3 + Rows Removed by Filter: 6 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4268,25 +4250,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4348,25 +4330,25 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Vectorized Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) -> Merge Append (never executed) @@ -4419,8 +4401,8 @@ WHERE v0 < 1 ORDER BY time, device_id LIMIT 10; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------ Limit (actual rows=0 loops=1) -> Custom Scan (ChunkAppend) on metrics_space (actual rows=0 loops=1) Order: metrics_space."time", metrics_space.device_id @@ -4500,9 +4482,10 @@ LIMIT 10; -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=0 loops=1) - Index Cond: (v0 < 1) -(81 rows) + -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + Rows Removed by Filter: 336 +(82 rows) :PREFIX SELECT * @@ -4552,7 +4535,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4561,7 +4544,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4570,7 +4553,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4597,7 +4580,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (85 rows) :PREFIX @@ -4617,21 +4600,21 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_1 > device_id) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Filter: (device_id < v0) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_1 > device_id) @@ -4696,21 +4679,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4722,7 +4705,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4731,7 +4714,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4740,7 +4723,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4748,14 +4731,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4765,7 +4748,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: (v1 = (device_id)::double precision) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown between two order by column (not pushed down) @@ -4788,21 +4771,21 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1080 + Rows Removed by Filter: 2160 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 360 + Rows Removed by Filter: 720 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id @@ -4814,7 +4797,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_7_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort @@ -4823,7 +4806,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_8_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 2016 -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort @@ -4832,7 +4815,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_9_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 672 -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id -> Sort (actual rows=0 loops=1) @@ -4840,14 +4823,14 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 1512 + Rows Removed by Filter: 1008 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=0 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id @@ -4857,7 +4840,7 @@ LIMIT 10; Sort Method: quicksort -> Seq Scan on _hyper_2_12_chunk (actual rows=0 loops=1) Filter: ((v0)::double precision = v1) - Rows Removed by Filter: 504 + Rows Removed by Filter: 336 (80 rows) --pushdown of quals on order by and segment by cols anded together @@ -4882,10 +4865,10 @@ LIMIT 10; Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=713 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Vectorized Filter: (_hyper_2_4_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 @@ -4922,27 +4905,27 @@ LIMIT 10; Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id - -> Sort (actual rows=6 loops=1) + -> Sort (actual rows=9 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=4 loops=1) + -> Sort (actual rows=2 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1068 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2139 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 12 + Rows Removed by Filter: 21 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - -> Sort (actual rows=2 loops=1) + -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=356 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=713 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) Filter: ((_ts_meta_max_3 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) -> Merge Append (never executed) @@ -5005,19 +4988,19 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) Vectorized Filter: ("time" < now()) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) @@ -5074,16 +5057,16 @@ LIMIT 10; -> Merge Append (actual rows=10 loops=1) Sort Key: _hyper_2_12_chunk."time" DESC -> Index Only Scan using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=3 loops=1) - Heap Fetches: 3 + Heap Fetches: 0 -> Sort (actual rows=6 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5131,12 +5114,12 @@ LIMIT 10; -> Sort (actual rows=7 loops=1) Sort Key: _hyper_2_11_chunk."time" DESC, _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC, _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: _hyper_2_9_chunk."time" DESC @@ -5174,42 +5157,44 @@ LIMIT 10; -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_4_chunk.device_id, _hyper_2_4_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_5_chunk.device_id, _hyper_2_5_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_6_chunk.device_id, _hyper_2_6_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_time_idx on _hyper_2_9_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Sort (actual rows=1 loops=1) Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_time_idx on _hyper_2_12_chunk (actual rows=1 loops=1) - Heap Fetches: 1 + Heap Fetches: 0 (36 rows) -- -- test ordered path -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5218,42 +5203,43 @@ ORDER BY time, device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE SELECT * @@ -5266,32 +5252,32 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (28 rows) @@ -5317,15 +5303,15 @@ LIMIT 100; -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk."time" Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk."time" Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk."time" Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5351,7 +5337,7 @@ LIMIT 100; -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk."time" Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- test ordering only by segmentby columns @@ -5373,15 +5359,15 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=100 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 100 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=1 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=1 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) @@ -5407,7 +5393,7 @@ LIMIT 100; -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=1 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1 + Heap Fetches: 0 (42 rows) -- should produce ordered path @@ -5423,38 +5409,38 @@ ORDER BY device_id, v0; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) -- should produce ordered path @@ -5472,41 +5458,43 @@ ORDER BY device_id, v1 DESC; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 1005 - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 335 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Heap Fetches: 504 + Heap Fetches: 0 (32 rows) --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -5519,38 +5507,38 @@ ORDER BY device_id, v3; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time", _hyper_2_7_chunk.v3 Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5568,18 +5556,18 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=4195 loops=1) + Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5590,7 +5578,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true @@ -5601,7 +5589,7 @@ ORDER BY device_id DESC, -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (36 rows) @@ -5618,38 +5606,38 @@ ORDER BY device_id DESC, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id DESC, _hyper_2_7_chunk.device_id_peer DESC, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1341 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=447 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (34 rows) @@ -5667,31 +5655,32 @@ ORDER BY time, device_id; QUERY PLAN --------------------------------------------------------------------------------------------------------- - Sort (actual rows=4195 loops=1) + Sort (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Append (actual rows=4195 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) + -> Append (actual rows=3915 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Seq Scan on _hyper_2_8_chunk (actual rows=1005 loops=1) + Rows Removed by Filter: 225 + -> Seq Scan on _hyper_2_8_chunk (actual rows=1341 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 507 - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) + Rows Removed by Filter: 675 + -> Seq Scan on _hyper_2_9_chunk (actual rows=447 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - Rows Removed by Filter: 169 - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + Rows Removed by Filter: 225 + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) (23 rows) +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded :PREFIX @@ -5702,7 +5691,7 @@ ORDER BY time, device_id; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ - Custom Scan (ChunkAppend) on metrics_space (actual rows=4195 loops=1) + Custom Scan (ChunkAppend) on metrics_space (actual rows=3915 loops=1) Order: metrics_space."time", metrics_space.device_id -> Merge Append (actual rows=0 loops=1) Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id @@ -5730,59 +5719,57 @@ ORDER BY time, -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) Rows Removed by Filter: 1 - -> Merge Append (actual rows=1675 loops=1) + -> Merge Append (actual rows=2235 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Sort (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=1005 loops=1) + -> Sort (actual rows=1341 loops=1) Sort Key: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1005 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1341 loops=1) Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=335 loops=1) + -> Sort (actual rows=447 loops=1) Sort Key: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) - Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) - Rows Removed by Filter: 169 - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=447 loops=1) + Index Cond: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) Vectorized Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) Filter: (_ts_meta_max_3 > ('2000-01-08'::cstring)::timestamp with time zone) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) Filter: ("time" > ('2000-01-08'::cstring)::timestamp with time zone) -(80 rows) +(78 rows) -- test aggregate :PREFIX @@ -5793,28 +5780,28 @@ FROM :TEST_TABLE; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=9 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (25 rows) -- test aggregate with GROUP BY @@ -5835,48 +5822,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (50 rows) -- test window functions with GROUP BY @@ -5896,48 +5883,48 @@ ORDER BY device_id; -> Append (actual rows=15 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_5_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_6_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_7_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_8_chunk.device_id - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=2016 loops=1) Sort Key: _hyper_2_8_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _hyper_2_8_chunk (actual rows=2016 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_9_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=672 loops=1) Sort Key: _hyper_2_9_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_9_chunk (actual rows=672 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_10_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=3 loops=1) Group Key: _hyper_2_11_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_12_chunk.device_id Sort Method: quicksort - -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk (actual rows=336 loops=1) (51 rows) SET enable_hashagg = ON; @@ -5952,47 +5939,47 @@ FROM q ORDER BY v1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------- - Sort (actual rows=6840 loops=1) + Sort (actual rows=8640 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=6840 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=6840 loops=1) + -> Subquery Scan on q (actual rows=8640 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=8640 loops=1) Order: metrics_space."time" - -> Merge Append (actual rows=1800 loops=1) + -> Merge Append (actual rows=3600 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_6_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Merge Append (actual rows=3360 loops=1) Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Merge Append (actual rows=2520 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Merge Append (actual rows=1680 loops=1) Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Sort (actual rows=1512 loops=1) + -> Sort (actual rows=1008 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=336 loops=1) (41 rows) -- test CTE join @@ -6016,40 +6003,40 @@ FROM q1 ORDER BY q1.time; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------- - Merge Join (actual rows=1368 loops=1) + Merge Join (actual rows=1728 loops=1) Merge Cond: (metrics_space."time" = metrics_space_1."time") - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1368 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space (actual rows=1728 loops=1) Order: metrics_space."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) - -> Materialize (actual rows=1368 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1368 loops=1) + -> Materialize (actual rows=1728 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space metrics_space_1 (actual rows=1728 loops=1) Order: metrics_space_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: _hyper_2_5_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk (actual rows=672 loops=1) Index Cond: (device_id = 2) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Sort Key: _hyper_2_11_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -6066,14 +6053,14 @@ WHERE device_id = 1; Finalize Aggregate (actual rows=1 loops=1) -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=672 loops=1) Filter: (device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) (13 rows) @@ -6081,37 +6068,37 @@ WHERE device_id = 1; EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) EXECUTE prep; count ------- - 1368 + 1728 (1 row) DEALLOCATE prep; @@ -6129,32 +6116,33 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id - Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + Index Cond: (_hyper_2_7_chunk.device_id = 1) + Heap Fetches: 0 + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id = 1) -(25 rows) +(26 rows) -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE @@ -6165,26 +6153,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Filter: (_hyper_2_7_chunk.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Sort Key: _hyper_2_10_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6201,26 +6189,26 @@ ORDER BY device_id, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=1368 loops=1) + Merge Append (actual rows=1728 loops=1) Sort Key: test_table_1."time" - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Output: ((test_table_1.*)::metrics_space), test_table_1.device_id, test_table_1."time" Sort Key: test_table_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk test_table_1 (actual rows=720 loops=1) Output: test_table_1.*, test_table_1.device_id, test_table_1."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk test_table_2 (actual rows=672 loops=1) Output: test_table_2.*, test_table_2.device_id, test_table_2."time" Filter: (test_table_2.device_id = 1) - -> Sort (actual rows=504 loops=1) + -> Sort (actual rows=336 loops=1) Output: ((test_table_3.*)::metrics_space), test_table_3.device_id, test_table_3."time" Sort Key: test_table_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk test_table_3 (actual rows=336 loops=1) Output: test_table_3.*, test_table_3.device_id, test_table_3."time" Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6236,18 +6224,18 @@ WHERE device_id = 1 ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6266,19 +6254,19 @@ WHERE device_id = 1; -> Append (actual rows=3 loops=1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id = 1) -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Index Cond: (_hyper_2_7_chunk.device_id = 1) - Heap Fetches: 504 + Heap Fetches: 0 -> Partial Aggregate (actual rows=1 loops=1) Output: PARTIAL count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 @@ -6293,48 +6281,50 @@ FROM :TEST_TABLE ORDER BY device_id; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=6840 loops=1) + Merge Append (actual rows=8640 loops=1) Sort Key: _hyper_2_4_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_7_chunk_tmp_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id - Heap Fetches: 504 - -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_8_chunk_tmp_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id - Heap Fetches: 1512 - -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Index Only Scan using _hyper_2_9_chunk_tmp_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id - Heap Fetches: 504 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + Heap Fetches: 0 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id Bulk Decompression: false -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Index Only Scan using _hyper_2_12_chunk_tmp_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id - Heap Fetches: 504 + Heap Fetches: 0 (39 rows) DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; --use the peer index :PREFIX_VERBOSE SELECT * @@ -6344,76 +6334,56 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=0 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Index Cond: (compress_hyper_6_17_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=0 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 Index Cond: (compress_hyper_6_18_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=0 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 Index Cond: (compress_hyper_6_19_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Filter: (_hyper_2_7_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Filter: (_hyper_2_8_chunk.device_id_peer = 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Filter: (_hyper_2_9_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Index Cond: (_hyper_2_7_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Index Cond: (_hyper_2_8_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Index Cond: (_hyper_2_9_chunk.device_id_peer = 1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=0 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 Index Cond: (compress_hyper_6_20_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Bulk Decompression: true -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=0 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Index Cond: (compress_hyper_6_21_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) - Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 - Filter: (_hyper_2_12_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 -(68 rows) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) +(47 rows) +RESET enable_sort; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6528,10 +6498,10 @@ WHERE device_id_peer IN ( Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 Filter: (compress_hyper_6_21_chunk.device_id_peer = 1) Rows Removed by Filter: 3 - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) Output: _hyper_2_12_chunk.device_id_peer - Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) - Heap Fetches: 0 + Filter: (_hyper_2_12_chunk.device_id_peer = 1) + Rows Removed by Filter: 336 (52 rows) --with multiple values can get a nested loop. @@ -6546,42 +6516,42 @@ WHERE device_id_peer IN ( Nested Loop Semi Join (actual rows=0 loops=1) Output: _hyper_2_4_chunk.device_id_peer Join Filter: (_hyper_2_4_chunk.device_id_peer = "*VALUES*".column1) - Rows Removed by Join Filter: 13680 - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Rows Removed by Join Filter: 17280 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer - -> Materialize (actual rows=2 loops=6840) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6595,17 +6565,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6614,6 +6584,8 @@ WHERE device_id IN ( (16 rows) --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -6622,50 +6594,52 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Nested Loop Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer - Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Join Filter: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) + Rows Removed by Join Filter: 12096 + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - -> Hash (actual rows=2 loops=1) + -> Materialize (actual rows=2 loops=8640) Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 (42 rows) +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze :PREFIX_NO_ANALYZE @@ -6676,54 +6650,43 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Nested Loop + Hash Semi Join Output: _hyper_2_4_chunk.device_id_peer - -> Unique - Output: "*VALUES*".column1 - -> Sort - Output: "*VALUES*".column1 - Sort Key: "*VALUES*".column1 - -> Values Scan on "*VALUES*" - Output: "*VALUES*".column1 + Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) -> Append -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_17_chunk Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - Index Cond: (compress_hyper_6_17_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_18_chunk Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - Index Cond: (compress_hyper_6_18_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_19_chunk Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - Index Cond: (compress_hyper_6_19_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk + -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - Index Cond: (_hyper_2_7_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk + -> Index Only Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - Index Cond: (_hyper_2_8_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk + -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - Index Cond: (_hyper_2_9_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk.device_id = "*VALUES*".column1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk.device_id = "*VALUES*".column1) - -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk + -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id - Index Cond: (_hyper_2_12_chunk.device_id = "*VALUES*".column1) -(47 rows) + -> Hash + Output: "*VALUES*".column1 + -> Values Scan on "*VALUES*" + Output: "*VALUES*".column1 +(36 rows) RESET seq_page_cost; :PREFIX_VERBOSE @@ -6733,17 +6696,17 @@ WHERE device_id IN ( VALUES (1)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Append (actual rows=1368 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + Append (actual rows=1728 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 Filter: (compress_hyper_6_17_chunk.device_id = 1) - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer Filter: (_hyper_2_7_chunk.device_id = 1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) @@ -6759,42 +6722,42 @@ WHERE device_id IN ( (2)); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=2736 loops=1) + Hash Semi Join (actual rows=3456 loops=1) Output: _hyper_2_4_chunk.device_id_peer Hash Cond: (_hyper_2_4_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=720 loops=1) Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1) Output: compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=2160 loops=1) Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1) Output: compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=720 loops=1) Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1) Output: compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=672 loops=1) Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=2016 loops=1) Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id - -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=672 loops=1) Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=336 loops=1) Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id Bulk Decompression: false -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id -> Hash (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -6824,7 +6787,7 @@ LIMIT 10; -> Sort (actual rows=10 loops=1) Sort Key: _hyper_2_10_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (never executed) @@ -6858,17 +6821,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -6910,17 +6873,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -6980,17 +6943,17 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time", m2_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m2_2."time", m2_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time", m2_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time", m2_4.device_id @@ -7027,35 +6990,35 @@ FROM :TEST_TABLE m1 -> Materialize (actual rows=49 loops=1) -> Nested Loop (actual rows=11 loops=1) Join Filter: (m1_1."time" = m3_1."time") - Rows Removed by Join Filter: 13672 + Rows Removed by Join Filter: 17272 -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" -> Sort (actual rows=3 loops=1) Sort Key: m3_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_2 (actual rows=1 loops=1) Filter: (device_id = 3) -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_3 (actual rows=1 loops=1) Filter: (device_id = 3) - -> Materialize (actual rows=4561 loops=3) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=504 loops=1) - -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=1512 loops=1) - -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_7_chunk m1_4 (actual rows=672 loops=1) + -> Seq Scan on _hyper_2_8_chunk m1_5 (actual rows=2016 loops=1) + -> Seq Scan on _hyper_2_9_chunk m1_6 (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=336 loops=1) -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (actual rows=1008 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=504 loops=1) + -> Seq Scan on _hyper_2_12_chunk m1_9 (actual rows=336 loops=1) (88 rows) :PREFIX @@ -7079,7 +7042,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) Filter: (device_id = 1) -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_2 (never executed) @@ -7095,7 +7058,7 @@ FROM :TEST_TABLE m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7129,7 +7092,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -7146,7 +7109,7 @@ FROM metrics m1 -> Sort (actual rows=100 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7174,7 +7137,7 @@ LIMIT 10; -> Merge Left Join (actual rows=10 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 40 + Rows Removed by Join Filter: 39 -> Custom Scan (ChunkAppend) on metrics_space m1 (actual rows=10 loops=1) Order: m1."time", m1.device_id -> Merge Append (actual rows=10 loops=1) @@ -7182,17 +7145,17 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=6 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time", m1_4.device_id @@ -7226,7 +7189,7 @@ LIMIT 10; -> Sort (never executed) Sort Key: m1_9."time", m1_9.device_id -> Seq Scan on _hyper_2_12_chunk m1_9 (never executed) - -> Materialize (actual rows=50 loops=1) + -> Materialize (actual rows=49 loops=1) -> Custom Scan (ChunkAppend) on metrics_space m2 (actual rows=11 loops=1) Order: m2."time" -> Merge Append (actual rows=11 loops=1) @@ -7234,26 +7197,26 @@ LIMIT 10; -> Sort (actual rows=3 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=7 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=1080 loops=1) + -> Sort (actual rows=2160 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=3 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7306,17 +7269,17 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=61 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=21 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7352,10 +7315,10 @@ LIMIT 100; -> Sort (actual rows=22 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7424,7 +7387,7 @@ LIMIT 100; -> Sort (actual rows=101 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Sort (never executed) Sort Key: m1_2."time", m1_2.device_id @@ -7451,10 +7414,10 @@ LIMIT 100; -> Sort (actual rows=21 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) + -> Sort (actual rows=720 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) Filter: (device_id = 2) Rows Removed by Filter: 2 @@ -7523,17 +7486,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7559,17 +7522,17 @@ LIMIT 20; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7618,17 +7581,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m1_1."time", m1_1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m1_2."time", m1_2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m1_3."time", m1_3.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m1_4."time" @@ -7654,17 +7617,17 @@ LIMIT 10; -> Sort (actual rows=2 loops=1) Sort Key: m2_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) -> Sort (actual rows=4 loops=1) Sort Key: m2_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=2160 loops=1) -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) -> Sort (actual rows=2 loops=1) Sort Key: m2_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=720 loops=1) -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) -> Merge Append (never executed) Sort Key: m2_4."time" @@ -7701,7 +7664,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 7 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (never executed) @@ -7714,7 +7677,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_4 (actual rows=1 loops=7) Index Cond: ("time" = g."time") - Heap Fetches: 7 + Heap Fetches: 0 -> Index Only Scan using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m1_5 (never executed) Index Cond: ("time" = g."time") Heap Fetches: 0 @@ -7723,7 +7686,7 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time")) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (never executed) @@ -7755,15 +7718,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_time_idx on _hyper_2_7_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 1) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 1)) (18 rows) @@ -7778,15 +7741,15 @@ FROM generate_series('2000-01-01'::timestamptz, '2000-02-01'::timestamptz, '1d': Chunks excluded during runtime: 2 -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_1 (actual rows=1 loops=5) Filter: ("time" = g."time") - Rows Removed by Filter: 168 + Rows Removed by Filter: 336 -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=5) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) -> Index Only Scan using _hyper_2_8_chunk_metrics_space_device_id_time_idx on _hyper_2_8_chunk m1_2 (actual rows=1 loops=7) Index Cond: ((device_id = 2) AND ("time" = g."time")) - Heap Fetches: 7 + Heap Fetches: 0 -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_3 (actual rows=1 loops=7) Filter: ("time" = g."time") - Rows Removed by Filter: 240 + Rows Removed by Filter: 160 -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=7) Filter: ((_ts_meta_min_3 <= g."time") AND (_ts_meta_max_3 >= g."time") AND (device_id = 2)) (18 rows) @@ -7950,34 +7913,34 @@ WHERE metrics.time > metrics_space.time QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------ Nested Loop (actual rows=0 loops=1) - -> Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=1080 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=504 loops=1) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=1512 loops=1) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=504 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=2016 loops=1) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=504 loops=1) - -> Append (actual rows=0 loops=6840) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=6840) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) + -> Append (actual rows=0 loops=8640) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 360 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 720 + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=6840) + -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk (actual rows=0 loops=8640) Index Cond: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) Filter: (_hyper_2_4_chunk.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=0 loops=8640) Filter: (("time" > _hyper_2_4_chunk."time") AND ("time" < _hyper_2_4_chunk."time")) - Rows Removed by Filter: 504 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=6840) + Rows Removed by Filter: 336 + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=1 loops=8640) Index Cond: (device_id = _hyper_2_4_chunk.device_id) (30 rows) @@ -8071,26 +8034,26 @@ $$; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Unique (actual rows=0 loops=1) -> Nested Loop (actual rows=0 loops=1) - -> Merge Append (actual rows=6840 loops=1) + -> Merge Append (actual rows=8640 loops=1) Sort Key: d_1.device_id - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=1800 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk d_1 (actual rows=3600 loops=1) -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk d_2 (actual rows=3360 loops=1) -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk (actual rows=5 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=2520 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk d_3 (actual rows=1680 loops=1) -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk (actual rows=5 loops=1) - -> Limit (actual rows=0 loops=6840) - -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=6840) + -> Limit (actual rows=0 loops=8640) + -> Custom Scan (ChunkAppend) on metrics_ordered m (actual rows=0 loops=8640) Order: m."time" DESC Hypertables excluded during runtime: 0 - -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_28_chunk m_1 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_31_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_31_chunk compress_hyper_12_31_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_27_chunk m_2 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_30_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_30_chunk compress_hyper_12_30_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) - -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=6840) - -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=6840) + -> Custom Scan (DecompressChunk) on _hyper_11_26_chunk m_3 (actual rows=0 loops=8640) + -> Index Scan using compress_hyper_12_29_chunk_device_id_device_id_peer__ts_met_idx on compress_hyper_12_29_chunk compress_hyper_12_29_chunk_1 (actual rows=0 loops=8640) Index Cond: ((device_id = d_1.device_id) AND (device_id_peer = 3)) (23 rows) @@ -8161,7 +8124,7 @@ PREPARE tableoid_prep AS SELECT tableoid::regclass FROM :TEST_TABLE WHERE device -> Sort (actual rows=1 loops=1) Sort Key: _hyper_1_1_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=720 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=1 loops=1) Filter: (device_id = 1) Rows Removed by Filter: 4 @@ -9783,11 +9746,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) @@ -9796,11 +9759,11 @@ $sql$; :PREFIX SELECT * FROM ht_func(); QUERY PLAN ------------------------------------------------------------------------------------ - Append (actual rows=6840 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=1800 loops=1) + Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Seq Scan on _hyper_1_2_chunk (actual rows=2520 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=2520 loops=1) + -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) (6 rows) diff --git a/tsl/test/sql/include/transparent_decompression_query.sql b/tsl/test/sql/include/transparent_decompression_query.sql index e72a3651f1e..5b3b67aa7a1 100644 --- a/tsl/test/sql/include/transparent_decompression_query.sql +++ b/tsl/test/sql/include/transparent_decompression_query.sql @@ -17,19 +17,6 @@ FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time; --- test expressions -:PREFIX -SELECT time_bucket ('1d', time), - v1 + v2 AS "sum", - COALESCE(NULL, v1, v2) AS "coalesce", - NULL AS "NULL", - 'text' AS "text", - :TEST_TABLE AS "RECORD" -FROM :TEST_TABLE -WHERE device_id IN (1, 2) -ORDER BY time, - device_id; - -- test empty targetlist :PREFIX SELECT @@ -46,6 +33,23 @@ WHERE device_id < 0; SELECT 1 FROM :TEST_TABLE; +-- The following plans are flaky between MergeAppend or Sort + Append. +SET enable_sort = off; + +-- test expressions +:PREFIX +SELECT time_bucket ('1d', time), + v1 + v2 AS "sum", + COALESCE(NULL, v1, v2) AS "coalesce", + NULL AS "NULL", + 'text' AS "text", + :TEST_TABLE AS "RECORD" +FROM :TEST_TABLE +WHERE device_id IN (1, 2) +ORDER BY time, + device_id +; + -- test constraints not present in targetlist :PREFIX SELECT v1 @@ -87,6 +91,8 @@ ORDER BY time, device_id LIMIT 10; +RESET enable_sort; + -- test IS NULL / IS NOT NULL :PREFIX SELECT * @@ -311,12 +317,15 @@ LIMIT 10; -- -- should not produce ordered path +-- This plan is flaky between MergeAppend over Sorts and Sort over Append +SET enable_sort TO off; :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE time > '2000-01-08' ORDER BY time, device_id; +RESET enable_sort; -- should produce ordered path :PREFIX_VERBOSE @@ -382,7 +391,10 @@ ORDER BY device_id, v0, v1 DESC; --- should not produce ordered path +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; + +-- should not produce ordered path. :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE @@ -423,13 +435,13 @@ ORDER BY device_id DESC, -- -- test plan time exclusion -- first chunk should be excluded - :PREFIX SELECT * FROM :TEST_TABLE WHERE time > '2000-01-08' ORDER BY time, device_id; +RESET enable_sort; -- test runtime exclusion -- first chunk should be excluded @@ -569,6 +581,9 @@ ORDER BY device_id; DROP INDEX tmp_idx CASCADE; +-- These plans are flaky between MergeAppend and Sort over Append. +SET enable_sort TO OFF; + --use the peer index :PREFIX_VERBOSE SELECT * @@ -577,6 +592,8 @@ WHERE device_id_peer = 1 ORDER BY device_id_peer, time; +RESET enable_sort; + :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -611,6 +628,9 @@ WHERE device_id IN ( VALUES (1)); --with multiple values can get a semi-join or nested loop depending on seq_page_cost. +SET enable_hashjoin TO OFF; +SET enable_mergejoin TO OFF; + :PREFIX_VERBOSE SELECT device_id_peer FROM :TEST_TABLE @@ -618,6 +638,8 @@ WHERE device_id IN ( VALUES (1), (2)); +RESET enable_hashjoin; +RESET enable_mergejoin; SET seq_page_cost = 100; -- loop/row counts of this query is different on windows so we run it without analyze diff --git a/tsl/test/sql/transparent_decompression.sql.in b/tsl/test/sql/transparent_decompression.sql.in index 5103fb55e3e..78200a4fd9c 100644 --- a/tsl/test/sql/transparent_decompression.sql.in +++ b/tsl/test/sql/transparent_decompression.sql.in @@ -33,6 +33,8 @@ SELECT create_hypertable ('metrics', 'time'); ALTER TABLE metrics DROP COLUMN filler_1; +\set INTERVAL 30m + INSERT INTO metrics (time, device_id, device_id_peer, v0, v1, v2, v3) SELECT time, device_id, @@ -41,7 +43,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics @@ -55,7 +57,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics @@ -69,10 +71,10 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics; +VACUUM ANALYZE metrics; -- create identical hypertable with space partitioning CREATE TABLE metrics_space ( @@ -101,7 +103,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-01 0:00:00+0'::timestamptz, '2000-01-05 23:55:00+0', (interval :'INTERVAL') / 3) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space @@ -115,7 +117,7 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-06 0:00:00+0'::timestamptz, '2000-01-12 23:55:00+0', (interval :'INTERVAL') / 2) gtime (time), generate_series(1, 5, 1) gdevice (device_id); ALTER TABLE metrics_space @@ -129,10 +131,10 @@ SELECT time, device_id + 2, device_id + 0.5, NULL -FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', '20m') gtime (time), +FROM generate_series('2000-01-13 0:00:00+0'::timestamptz, '2000-01-19 23:55:00+0', :'INTERVAL') gtime (time), generate_series(1, 5, 1) gdevice (device_id); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on uncompressed hypertable and store result \set PREFIX '' @@ -153,24 +155,22 @@ RESET client_min_messages; -- compress first and last chunk on the hypertable ALTER TABLE metrics SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_1_1_chunk'); +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics') x) t +where n in (1, 3) +; -SELECT compress_chunk ('_timescaledb_internal._hyper_1_3_chunk'); +VACUUM ANALYZE metrics; -- compress some chunks on space partitioned hypertable -- we compress all chunks of first time slice, none of second, and 2 of the last time slice ALTER TABLE metrics_space SET (timescaledb.compress, timescaledb.compress_orderby = 'v0, v1 desc, time', timescaledb.compress_segmentby = 'device_id,device_id_peer'); -SELECT compress_chunk ('_timescaledb_internal._hyper_2_4_chunk'); - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_5_chunk'); - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_6_chunk'); - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_10_chunk'); - -SELECT compress_chunk ('_timescaledb_internal._hyper_2_11_chunk'); +select compress_chunk(x) +from (select row_number() over (order by x) n, x from show_chunks('metrics_space') x) t +where n in (1, 2, 3, 7, 8) +; SELECT ht.schema_name || '.' || ht.table_name AS "METRICS_COMPRESSED" FROM _timescaledb_catalog.hypertable ht @@ -194,7 +194,7 @@ CREATE INDEX ON metrics_space (device_id, device_id_peer DESC, v0, v1 DESC, time CREATE INDEX ON metrics_space (device_id DESC, device_id_peer DESC, v0, v1 DESC, time); -ANALYZE metrics_space; +VACUUM ANALYZE metrics_space; -- run queries on compressed hypertable and store result \set PREFIX ''