diff --git a/.github/gh_matrix_builder.py b/.github/gh_matrix_builder.py index 4a319abb24f..af6f2f36914 100755 --- a/.github/gh_matrix_builder.py +++ b/.github/gh_matrix_builder.py @@ -142,11 +142,11 @@ def macos_config(overrides): pg15_installcheck_args = "IGNORES='partialize_finalize transparent_decompress_chunk-15'" # transparent_decompress_chunk-[12,13,14] is ignored due to #5118 -pg14_installcheck_args = "IGNORES='bgw_db_scheduler bgw_db_scheduler_fixed partialize_finalize transparent_decompress_chunk-14'" +pg14_installcheck_args = "IGNORES='partialize_finalize'" -pg13_installcheck_args = "IGNORES='bgw_db_scheduler bgw_db_scheduler_fixed partialize_finalize transparent_decompress_chunk-13'" +pg13_installcheck_args = "IGNORES='partialize_finalize'" -pg12_installcheck_args = "IGNORES='bgw_db_scheduler bgw_db_scheduler_fixed partialize_finalize transparent_decompress_chunk-12'" +pg12_installcheck_args = "IGNORES='partialize_finalize'" # always test debug build on latest of all supported pg versions m["include"].append( diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-12.out b/tsl/test/shared/expected/transparent_decompress_chunk-12.out index 72259a96a7b..d5a05648757 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-12.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-12.out @@ -4,7 +4,33 @@ \set PREFIX 'EXPLAIN (analyze, costs off, timing off, summary off)' \set PREFIX_VERBOSE 'EXPLAIN (analyze, costs off, timing off, summary off, verbose)' \set PREFIX_NO_ANALYZE 'EXPLAIN (verbose, costs off)' -SELECT show_chunks('metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset +CREATE TABLE test_metrics_compressed(filler_1 int, filler_2 int, filler_3 int, time timestamptz NOT NULL, device_id int, v0 int, v1 int, v2 float, v3 float); +CREATE INDEX ON test_metrics_compressed(time); +CREATE INDEX ON test_metrics_compressed(device_id,time); +SELECT create_hypertable('test_metrics_compressed','time',create_default_indexes:=false); + create_hypertable + (22,public,test_metrics_compressed,t) +(1 row) + +ALTER TABLE test_metrics_compressed DROP COLUMN filler_1; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id+1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_2; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id-1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_3; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed SET (timescaledb.compress, timescaledb.compress_orderby='time DESC', timescaledb.compress_segmentby='device_id'); +SELECT compress_chunk(c.schema_name|| '.' || c.table_name) +FROM _timescaledb_catalog.chunk c, _timescaledb_catalog.hypertable ht where c.hypertable_id = ht.id and ht.table_name = 'test_metrics_compressed' and c.compressed_chunk_id IS NULL +ORDER BY c.table_name DESC; + compress_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk +(3 rows) + +VACUUM test_metrics_compressed; +ANALYZE test_metrics_compressed; +SELECT show_chunks('test_metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset -- this should use DecompressChunk node :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time LIMIT 5; @@ -13,7 +39,7 @@ QUERY PLAN Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=5 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (7 rows) @@ -45,20 +71,20 @@ FROM :TEST_TABLE t WHERE device_id IN (1, 2) ORDER BY time, device_id; QUERY PLAN - Sort (actual rows=7196 loops=1) + Sort (actual rows=14392 loops=1) Sort Key: t."time", t.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (7 rows) -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 rows) -- test empty resultset @@ -67,43 +93,43 @@ QUERY PLAN Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 20 + Rows Removed by Filter: 40 (4 rows) -- test targetlist not referencing columns :PREFIX SELECT 1 FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 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=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test order not present in targetlist :PREFIX SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; QUERY PLAN - Sort (actual rows=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (3 rows) @@ -118,8 +144,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=0 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 17990 - -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=40 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 (10 rows) @@ -128,7 +154,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -139,8 +165,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (device_id IS NOT NULL) (7 rows) @@ -151,7 +177,7 @@ QUERY PLAN Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=1) Index Cond: (device_id IS NULL) (7 rows) @@ -162,10 +188,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (8 rows) -- test cast pushdown @@ -173,7 +199,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -186,8 +212,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id = v0) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v1 ORDER BY time, device_id LIMIT 10; @@ -196,9 +222,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test expressions @@ -206,7 +232,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 3) (4 rows) @@ -218,10 +244,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 14392 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 28784 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test segment meta pushdown @@ -231,13 +257,13 @@ QUERY PLAN Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=5 loops=1) Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2985 + Rows Removed by Filter: 975 -> Sort (actual rows=5 loops=1) Sort Key: compress_hyper_X_X_chunk.device_id Sort Method: quicksort -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time < '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -246,12 +272,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=150 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=300 loops=1) Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2840 + Rows Removed by Filter: 680 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time <= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -260,12 +286,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=155 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=305 loops=1) Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2835 + Rows Removed by Filter: 675 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time >= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -274,10 +300,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17840 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35680 loops=1) Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 150 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 300 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -287,10 +313,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -300,10 +326,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ('Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone < "time") - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -316,8 +342,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v0 < device_id ORDER BY time, device_id LIMIT 10; @@ -328,8 +354,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v0 ORDER BY time, device_id LIMIT 10; @@ -338,9 +364,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v0) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v1 = device_id ORDER BY time, device_id LIMIT 10; @@ -351,8 +377,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown between two order by column (not pushed down) @@ -364,8 +390,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown of quals on order by and segment by cols anded together @@ -376,8 +402,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=10 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 31 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + Rows Removed by Filter: 61 + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) Filter: (compress_hyper_X_X_chunk._ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) @@ -390,10 +416,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17866 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35736 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 124 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 244 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --functions not yet optimized @@ -403,9 +429,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: ("time" < now()) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test sort optimization interaction @@ -415,8 +441,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10; @@ -425,23 +451,23 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC, _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) (3 rows) -- test aggregate :PREFIX SELECT count(*) FROM :TEST_TABLE; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (3 rows) -- test aggregate with GROUP BY @@ -452,8 +478,8 @@ QUERY PLAN Sort Method: quicksort -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test window functions with GROUP BY @@ -465,8 +491,8 @@ QUERY PLAN -> WindowAgg (actual rows=5 loops=1) -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test CTE @@ -475,15 +501,15 @@ QUERY PLAN ) SELECT * FROM q ORDER BY v1; QUERY PLAN - Sort (actual rows=17990 loops=1) + Sort (actual rows=35980 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=17990 loops=1) - -> Sort (actual rows=17990 loops=1) + -> Subquery Scan on q (actual rows=35980 loops=1) + -> Sort (actual rows=35980 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (9 rows) -- test CTE join @@ -495,14 +521,14 @@ q2 AS ( ) SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; QUERY PLAN - Merge Join (actual rows=3598 loops=1) + Merge Join (actual rows=7196 loops=1) Merge Cond: (_hyper_X_X_chunk."time" = _hyper_X_X_chunk_1."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) - -> Materialize (actual rows=3598 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Materialize (actual rows=7196 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) Index Cond: (device_id = 2) (9 rows) @@ -511,9 +537,9 @@ SET enable_seqscan TO FALSE; -- IndexScans should work :PREFIX_VERBOSE SELECT time, device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -521,9 +547,9 @@ QUERY PLAN -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -531,9 +557,9 @@ QUERY PLAN -- whole row reference should work :PREFIX_VERBOSE SELECT test_table FROM :TEST_TABLE AS test_table WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=7196 loops=1) Output: test_table.*, test_table.device_id, test_table."time" - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -541,9 +567,9 @@ QUERY PLAN -- even when we select only a segmentby column, we still need count :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -552,8 +578,8 @@ QUERY PLAN QUERY PLAN Aggregate (actual rows=1 loops=1) Output: count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (6 rows) @@ -563,9 +589,9 @@ SET enable_seqscan TO TRUE; SET enable_hashjoin TO FALSE; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -573,7 +599,7 @@ QUERY PLAN --with multiple values can get a nested loop. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -583,10 +609,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -594,9 +620,9 @@ QUERY PLAN RESET enable_hashjoin; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -604,7 +630,7 @@ QUERY PLAN --with multiple values can get a semi-join or nested loop depending on seq_page_cost. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -614,10 +640,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -638,7 +664,7 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (15 rows) @@ -650,7 +676,7 @@ CREATE OR REPLACE VIEW compressed_view AS SELECT time, device_id, v1, v2 FROM :T QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -671,13 +697,13 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: m2."time", m2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (13 rows) :PREFIX @@ -692,25 +718,27 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Nested Loop (actual rows=10 loops=1) - Join Filter: (m1."time" = m3."time") - Rows Removed by Join Filter: 35969 + -> Merge Join (actual rows=10 loops=1) + Merge Cond: (m1."time" = m3."time") -> Merge Join (actual rows=10 loops=1) Merge Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) -> Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: m2."time", m2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) - Index Cond: (device_id = 3) -(19 rows) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) + -> Sort (actual rows=10 loops=1) + Sort Key: m3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=8 loops=1) + Index Cond: (device_id = 3) +(21 rows) :PREFIX SELECT * @@ -728,11 +756,11 @@ QUERY PLAN -> Merge Join (actual rows=100 loops=1) Merge Cond: (m1."time" = m2."time") -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) -> Materialize (actual rows=100 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) Index Cond: (device_id = 2) (10 rows) @@ -786,13 +814,13 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) -> Sort (actual rows=10 loops=1) Sort Key: m2."time", m2.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (13 rows) :PREFIX @@ -811,22 +839,22 @@ QUERY PLAN -> Gather Merge (actual rows=100 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=90 loops=2) + -> Sort (actual rows=51 loops=2) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id Sort Method: top-N heapsort Worker 0: Sort Method: top-N heapsort - -> Parallel Hash Left Join (actual rows=8995 loops=2) + -> Parallel Hash Left Join (actual rows=17990 loops=2) Hash Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 7196 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Parallel Hash (actual rows=1799 loops=2) - Buckets: 4096 (originally 2048) Batches: 1 (originally 1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) - -> Parallel Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + Rows Removed by Join Filter: 14392 + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Parallel Hash (actual rows=3598 loops=2) + Buckets: 8192 (originally 2048) Batches: 1 (originally 1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=7196 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) Filter: (device_id = 2) - Rows Removed by Filter: 16 + Rows Removed by Filter: 32 (20 rows) SET parallel_leader_participation TO false; @@ -846,14 +874,14 @@ QUERY PLAN -> Sort (actual rows=20 loops=1) Sort Key: m1."time", m1.device_id, m2.device_id Sort Method: top-N heapsort - -> Hash Join (actual rows=89950 loops=1) + -> Hash Join (actual rows=179900 loops=1) Hash Cond: (m1."time" = m2."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) + -> Hash (actual rows=35980 loops=1) + Buckets: 65536 Batches: 1 + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (12 rows) -- test self-join with sub-query @@ -874,14 +902,14 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id, m2.device_id Sort Method: top-N heapsort - -> Hash Join (actual rows=89950 loops=1) + -> Hash Join (actual rows=179900 loops=1) Hash Cond: (m1."time" = m2."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) + -> Hash (actual rows=35980 loops=1) + Buckets: 65536 Batches: 1 + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (12 rows) RESET parallel_leader_participation; @@ -899,10 +927,10 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 + Rows Removed by Filter: 99 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=32) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 17 + Rows Removed by Filter: 34 (9 rows) -- test prepared statement @@ -911,39 +939,39 @@ PREPARE prep AS SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (4 rows) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) DEALLOCATE prep; @@ -964,11 +992,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) :PREFIX EXECUTE param_prep (2); @@ -978,11 +1006,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) EXECUTE param_prep (1); @@ -1037,3 +1065,5 @@ EXECUTE param_prep (1); DEALLOCATE param_prep; RESET plan_cache_mode; +DROP TABLE test_metrics_compressed cascade; +NOTICE: drop cascades to 3 other objects diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-13.out b/tsl/test/shared/expected/transparent_decompress_chunk-13.out index 0e39ad0d625..32336575df0 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-13.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-13.out @@ -4,7 +4,33 @@ \set PREFIX 'EXPLAIN (analyze, costs off, timing off, summary off)' \set PREFIX_VERBOSE 'EXPLAIN (analyze, costs off, timing off, summary off, verbose)' \set PREFIX_NO_ANALYZE 'EXPLAIN (verbose, costs off)' -SELECT show_chunks('metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset +CREATE TABLE test_metrics_compressed(filler_1 int, filler_2 int, filler_3 int, time timestamptz NOT NULL, device_id int, v0 int, v1 int, v2 float, v3 float); +CREATE INDEX ON test_metrics_compressed(time); +CREATE INDEX ON test_metrics_compressed(device_id,time); +SELECT create_hypertable('test_metrics_compressed','time',create_default_indexes:=false); + create_hypertable + (22,public,test_metrics_compressed,t) +(1 row) + +ALTER TABLE test_metrics_compressed DROP COLUMN filler_1; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id+1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_2; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id-1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_3; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed SET (timescaledb.compress, timescaledb.compress_orderby='time DESC', timescaledb.compress_segmentby='device_id'); +SELECT compress_chunk(c.schema_name|| '.' || c.table_name) +FROM _timescaledb_catalog.chunk c, _timescaledb_catalog.hypertable ht where c.hypertable_id = ht.id and ht.table_name = 'test_metrics_compressed' and c.compressed_chunk_id IS NULL +ORDER BY c.table_name DESC; + compress_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk +(3 rows) + +VACUUM test_metrics_compressed; +ANALYZE test_metrics_compressed; +SELECT show_chunks('test_metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset -- this should use DecompressChunk node :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time LIMIT 5; @@ -13,7 +39,7 @@ QUERY PLAN Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=5 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (7 rows) @@ -45,20 +71,20 @@ FROM :TEST_TABLE t WHERE device_id IN (1, 2) ORDER BY time, device_id; QUERY PLAN - Sort (actual rows=7196 loops=1) + Sort (actual rows=14392 loops=1) Sort Key: t."time", t.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (7 rows) -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 rows) -- test empty resultset @@ -67,43 +93,43 @@ QUERY PLAN Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 20 + Rows Removed by Filter: 40 (4 rows) -- test targetlist not referencing columns :PREFIX SELECT 1 FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 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=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test order not present in targetlist :PREFIX SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; QUERY PLAN - Sort (actual rows=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (3 rows) @@ -118,8 +144,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=0 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 17990 - -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=40 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 (10 rows) @@ -128,7 +154,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -139,8 +165,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (device_id IS NOT NULL) (7 rows) @@ -151,7 +177,7 @@ QUERY PLAN Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=1) Index Cond: (device_id IS NULL) (7 rows) @@ -162,10 +188,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (8 rows) -- test cast pushdown @@ -173,7 +199,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -186,8 +212,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id = v0) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v1 ORDER BY time, device_id LIMIT 10; @@ -196,9 +222,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test expressions @@ -206,7 +232,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 3) (4 rows) @@ -218,10 +244,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 14392 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 28784 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test segment meta pushdown @@ -231,13 +257,13 @@ QUERY PLAN Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=5 loops=1) Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2985 + Rows Removed by Filter: 975 -> Sort (actual rows=5 loops=1) Sort Key: compress_hyper_X_X_chunk.device_id Sort Method: quicksort -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time < '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -246,12 +272,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=150 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=300 loops=1) Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2840 + Rows Removed by Filter: 680 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time <= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -260,12 +286,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=155 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=305 loops=1) Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2835 + Rows Removed by Filter: 675 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time >= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -274,10 +300,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17840 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35680 loops=1) Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 150 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 300 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -287,10 +313,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -300,10 +326,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ('Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone < "time") - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -316,8 +342,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v0 < device_id ORDER BY time, device_id LIMIT 10; @@ -328,8 +354,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v0 ORDER BY time, device_id LIMIT 10; @@ -338,9 +364,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v0) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v1 = device_id ORDER BY time, device_id LIMIT 10; @@ -351,8 +377,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown between two order by column (not pushed down) @@ -364,8 +390,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown of quals on order by and segment by cols anded together @@ -376,8 +402,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=10 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 31 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + Rows Removed by Filter: 61 + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) Filter: (compress_hyper_X_X_chunk._ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) @@ -390,10 +416,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17866 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35736 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 124 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 244 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --functions not yet optimized @@ -403,9 +429,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: ("time" < now()) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test sort optimization interaction @@ -415,8 +441,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10; @@ -425,23 +451,23 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC, _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) (3 rows) -- test aggregate :PREFIX SELECT count(*) FROM :TEST_TABLE; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (3 rows) -- test aggregate with GROUP BY @@ -453,8 +479,8 @@ QUERY PLAN -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test window functions with GROUP BY @@ -467,8 +493,8 @@ QUERY PLAN -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (9 rows) -- test CTE @@ -477,15 +503,15 @@ QUERY PLAN ) SELECT * FROM q ORDER BY v1; QUERY PLAN - Sort (actual rows=17990 loops=1) + Sort (actual rows=35980 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=17990 loops=1) - -> Sort (actual rows=17990 loops=1) + -> Subquery Scan on q (actual rows=35980 loops=1) + -> Sort (actual rows=35980 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (9 rows) -- test CTE join @@ -497,14 +523,14 @@ q2 AS ( ) SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; QUERY PLAN - Merge Join (actual rows=3598 loops=1) + Merge Join (actual rows=7196 loops=1) Merge Cond: (_hyper_X_X_chunk."time" = _hyper_X_X_chunk_1."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) - -> Materialize (actual rows=3598 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Materialize (actual rows=7196 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) Index Cond: (device_id = 2) (9 rows) @@ -513,9 +539,9 @@ SET enable_seqscan TO FALSE; -- IndexScans should work :PREFIX_VERBOSE SELECT time, device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -523,9 +549,9 @@ QUERY PLAN -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -533,9 +559,9 @@ QUERY PLAN -- whole row reference should work :PREFIX_VERBOSE SELECT test_table FROM :TEST_TABLE AS test_table WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=7196 loops=1) Output: test_table.*, test_table.device_id, test_table."time" - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -543,9 +569,9 @@ QUERY PLAN -- even when we select only a segmentby column, we still need count :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -554,8 +580,8 @@ QUERY PLAN QUERY PLAN Aggregate (actual rows=1 loops=1) Output: count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (6 rows) @@ -565,9 +591,9 @@ SET enable_seqscan TO TRUE; SET enable_hashjoin TO FALSE; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -575,7 +601,7 @@ QUERY PLAN --with multiple values can get a nested loop. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -585,10 +611,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -596,9 +622,9 @@ QUERY PLAN RESET enable_hashjoin; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -606,7 +632,7 @@ QUERY PLAN --with multiple values can get a semi-join or nested loop depending on seq_page_cost. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -616,10 +642,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -640,7 +666,7 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (15 rows) @@ -652,7 +678,7 @@ CREATE OR REPLACE VIEW compressed_view AS SELECT time, device_id, v1, v2 FROM :T QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -670,18 +696,18 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=512 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) (15 rows) :PREFIX @@ -698,23 +724,23 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop (actual rows=10 loops=1) Join Filter: (m1."time" = m3."time") - Rows Removed by Join Filter: 35969 + Rows Removed by Join Filter: 71949 -> Nested Loop (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=512 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=7196 loops=10) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=8 loops=10) Index Cond: (device_id = 3) (21 rows) @@ -734,11 +760,11 @@ QUERY PLAN -> Merge Join (actual rows=100 loops=1) Merge Cond: (m1."time" = m2."time") -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) -> Materialize (actual rows=100 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) Index Cond: (device_id = 2) (10 rows) @@ -789,18 +815,18 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop Left Join (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=512 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) (15 rows) :PREFIX @@ -818,24 +844,28 @@ 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 - Presorted Key: m1."time" - Full-sort Groups: 3 Sort Method: quicksort + Presorted Key: m1."time", m1.device_id + Full-sort Groups: 4 Sort Method: quicksort -> Merge Left Join (actual rows=101 loops=1) Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 81 + Rows Removed by Join Filter: 80 + -> Gather Merge (actual rows=101 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=543 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) -> Sort (actual rows=101 loops=1) - Sort Key: m1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Sort (actual rows=102 loops=1) Sort Key: m2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) Index Cond: (device_id = 2) -(20 rows) +(24 rows) SET parallel_leader_participation TO false; -- test implicit self-join @@ -860,13 +890,13 @@ QUERY PLAN -> Sort (actual rows=6 loops=1) Sort Key: m1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) -> Sort (actual rows=26 loops=1) Sort Key: m2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (17 rows) -- test self-join with sub-query @@ -893,13 +923,13 @@ QUERY PLAN -> Sort (actual rows=6 loops=1) Sort Key: m1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) -> Sort (actual rows=26 loops=1) Sort Key: m2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) (17 rows) RESET parallel_leader_participation; @@ -917,10 +947,10 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 + Rows Removed by Filter: 99 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=32) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 17 + Rows Removed by Filter: 34 (9 rows) -- test prepared statement @@ -929,39 +959,39 @@ PREPARE prep AS SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (4 rows) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) DEALLOCATE prep; @@ -982,11 +1012,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) :PREFIX EXECUTE param_prep (2); @@ -996,11 +1026,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) EXECUTE param_prep (1); @@ -1055,3 +1085,5 @@ EXECUTE param_prep (1); DEALLOCATE param_prep; RESET plan_cache_mode; +DROP TABLE test_metrics_compressed cascade; +NOTICE: drop cascades to 3 other objects diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-14.out b/tsl/test/shared/expected/transparent_decompress_chunk-14.out index 0e39ad0d625..0792f7c28b3 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-14.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-14.out @@ -4,7 +4,33 @@ \set PREFIX 'EXPLAIN (analyze, costs off, timing off, summary off)' \set PREFIX_VERBOSE 'EXPLAIN (analyze, costs off, timing off, summary off, verbose)' \set PREFIX_NO_ANALYZE 'EXPLAIN (verbose, costs off)' -SELECT show_chunks('metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset +CREATE TABLE test_metrics_compressed(filler_1 int, filler_2 int, filler_3 int, time timestamptz NOT NULL, device_id int, v0 int, v1 int, v2 float, v3 float); +CREATE INDEX ON test_metrics_compressed(time); +CREATE INDEX ON test_metrics_compressed(device_id,time); +SELECT create_hypertable('test_metrics_compressed','time',create_default_indexes:=false); + create_hypertable + (22,public,test_metrics_compressed,t) +(1 row) + +ALTER TABLE test_metrics_compressed DROP COLUMN filler_1; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id+1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_2; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id-1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_3; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed SET (timescaledb.compress, timescaledb.compress_orderby='time DESC', timescaledb.compress_segmentby='device_id'); +SELECT compress_chunk(c.schema_name|| '.' || c.table_name) +FROM _timescaledb_catalog.chunk c, _timescaledb_catalog.hypertable ht where c.hypertable_id = ht.id and ht.table_name = 'test_metrics_compressed' and c.compressed_chunk_id IS NULL +ORDER BY c.table_name DESC; + compress_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk + _timescaledb_internal._hyper_X_X_chunk +(3 rows) + +VACUUM test_metrics_compressed; +ANALYZE test_metrics_compressed; +SELECT show_chunks('test_metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset -- this should use DecompressChunk node :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY time LIMIT 5; @@ -13,7 +39,7 @@ QUERY PLAN Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=5 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (7 rows) @@ -45,20 +71,20 @@ FROM :TEST_TABLE t WHERE device_id IN (1, 2) ORDER BY time, device_id; QUERY PLAN - Sort (actual rows=7196 loops=1) + Sort (actual rows=14392 loops=1) Sort Key: t."time", t.device_id Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk t (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (7 rows) -- test empty targetlist :PREFIX SELECT FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 rows) -- test empty resultset @@ -67,43 +93,43 @@ QUERY PLAN Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id < 0) - Rows Removed by Filter: 20 + Rows Removed by Filter: 40 (4 rows) -- test targetlist not referencing columns :PREFIX SELECT 1 FROM :TEST_TABLE; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (2 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=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test order not present in targetlist :PREFIX SELECT v2 FROM :TEST_TABLE WHERE device_id = 1 ORDER BY v1; QUERY PLAN - Sort (actual rows=3598 loops=1) + Sort (actual rows=7196 loops=1) Sort Key: _hyper_X_X_chunk.v1 Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (6 rows) -- test column with all NULL :PREFIX SELECT v3 FROM :TEST_TABLE WHERE device_id = 1; QUERY PLAN - Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (3 rows) @@ -118,8 +144,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=0 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk.v3 > '10'::double precision) - Rows Removed by Filter: 17990 - -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=40 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 (10 rows) @@ -128,7 +154,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -139,8 +165,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (device_id IS NOT NULL) (7 rows) @@ -151,7 +177,7 @@ QUERY PLAN Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=1) Index Cond: (device_id IS NULL) (7 rows) @@ -162,10 +188,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=8 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=14392 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=16 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 12 + Rows Removed by Filter: 24 (8 rows) -- test cast pushdown @@ -173,7 +199,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -186,8 +212,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (device_id = v0) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v1 ORDER BY time, device_id LIMIT 10; @@ -196,9 +222,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test expressions @@ -206,7 +232,7 @@ QUERY PLAN QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 3) (4 rows) @@ -218,10 +244,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) Filter: (device_id = length("substring"(version(), 1, 3))) - Rows Removed by Filter: 14392 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 28784 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test segment meta pushdown @@ -231,13 +257,13 @@ QUERY PLAN Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=5 loops=1) Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2985 + Rows Removed by Filter: 975 -> Sort (actual rows=5 loops=1) Sort Key: compress_hyper_X_X_chunk.device_id Sort Method: quicksort -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: ((_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time < '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -246,12 +272,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=150 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=300 loops=1) Filter: ("time" < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2840 + Rows Removed by Filter: 680 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 < 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time <= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -260,12 +286,12 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=155 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=305 loops=1) Filter: ("time" <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 2835 + Rows Removed by Filter: 675 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=5 loops=1) Filter: (_ts_meta_min_1 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 15 + Rows Removed by Filter: 35 (10 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE time >= '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; @@ -274,10 +300,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17840 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35680 loops=1) Filter: ("time" >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 150 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 300 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -287,10 +313,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -300,10 +326,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17835 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35675 loops=1) Filter: ('Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone < "time") - Rows Removed by Filter: 155 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 305 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) Filter: (_ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) (9 rows) @@ -316,8 +342,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < 1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v0 < device_id ORDER BY time, device_id LIMIT 10; @@ -328,8 +354,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 < device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE device_id < v0 ORDER BY time, device_id LIMIT 10; @@ -338,9 +364,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: (device_id < v0) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) :PREFIX SELECT * FROM :TEST_TABLE WHERE v1 = device_id ORDER BY time, device_id LIMIT 10; @@ -351,8 +377,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v1 = device_id) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown between two order by column (not pushed down) @@ -364,8 +390,8 @@ QUERY PLAN Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=0 loops=1) Filter: (v0 = v1) - Rows Removed by Filter: 17990 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 35980 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --pushdown of quals on order by and segment by cols anded together @@ -376,8 +402,8 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=10 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 Filter: (_hyper_X_X_chunk."time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) - Rows Removed by Filter: 31 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) + Rows Removed by Filter: 61 + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=1 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) Filter: (compress_hyper_X_X_chunk._ts_meta_max_1 > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) @@ -390,10 +416,10 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17866 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35736 loops=1) Filter: (("time" > 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) OR (device_id = 1)) - Rows Removed by Filter: 124 - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + Rows Removed by Filter: 244 + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) --functions not yet optimized @@ -403,9 +429,9 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) Filter: ("time" < now()) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (7 rows) -- test sort optimization interaction @@ -415,8 +441,8 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY time DESC, device_id LIMIT 10; @@ -425,23 +451,23 @@ QUERY PLAN -> Sort (actual rows=10 loops=1) Sort Key: _hyper_X_X_chunk."time" DESC, _hyper_X_X_chunk.device_id Sort Method: top-N heapsort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (6 rows) :PREFIX SELECT time, device_id FROM :TEST_TABLE ORDER BY device_id, time DESC LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) (3 rows) -- test aggregate :PREFIX SELECT count(*) FROM :TEST_TABLE; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (3 rows) -- test aggregate with GROUP BY @@ -453,8 +479,8 @@ QUERY PLAN -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (8 rows) -- test window functions with GROUP BY @@ -467,8 +493,8 @@ QUERY PLAN -> HashAggregate (actual rows=5 loops=1) Group Key: _hyper_X_X_chunk.device_id Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (9 rows) -- test CTE @@ -477,15 +503,15 @@ QUERY PLAN ) SELECT * FROM q ORDER BY v1; QUERY PLAN - Sort (actual rows=17990 loops=1) + Sort (actual rows=35980 loops=1) Sort Key: q.v1 Sort Method: quicksort - -> Subquery Scan on q (actual rows=17990 loops=1) - -> Sort (actual rows=17990 loops=1) + -> Subquery Scan on q (actual rows=35980 loops=1) + -> Sort (actual rows=35980 loops=1) Sort Key: _hyper_X_X_chunk."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) (9 rows) -- test CTE join @@ -497,14 +523,14 @@ q2 AS ( ) SELECT * FROM q1 INNER JOIN q2 ON q1.time = q2.time ORDER BY q1.time; QUERY PLAN - Merge Join (actual rows=3598 loops=1) + Merge Join (actual rows=7196 loops=1) Merge Cond: (_hyper_X_X_chunk."time" = _hyper_X_X_chunk_1."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) - -> Materialize (actual rows=3598 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=3598 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Materialize (actual rows=7196 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk _hyper_X_X_chunk_1 (actual rows=7196 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) Index Cond: (device_id = 2) (9 rows) @@ -513,9 +539,9 @@ SET enable_seqscan TO FALSE; -- IndexScans should work :PREFIX_VERBOSE SELECT time, device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -523,9 +549,9 @@ QUERY PLAN -- globs should not plan IndexOnlyScans :PREFIX_VERBOSE SELECT * FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk."time", _hyper_X_X_chunk.device_id, _hyper_X_X_chunk.v0, _hyper_X_X_chunk.v1, _hyper_X_X_chunk.v2, _hyper_X_X_chunk.v3 - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -533,9 +559,9 @@ QUERY PLAN -- whole row reference should work :PREFIX_VERBOSE SELECT test_table FROM :TEST_TABLE AS test_table WHERE device_id = 1 ORDER BY device_id, time; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk test_table (actual rows=7196 loops=1) Output: test_table.*, test_table.device_id, test_table."time" - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -543,9 +569,9 @@ QUERY PLAN -- even when we select only a segmentby column, we still need count :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id = 1 ORDER BY device_id; QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -554,8 +580,8 @@ QUERY PLAN QUERY PLAN Aggregate (actual rows=1 loops=1) Output: count(*) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (6 rows) @@ -565,9 +591,9 @@ SET enable_seqscan TO TRUE; SET enable_hashjoin TO FALSE; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -575,7 +601,7 @@ QUERY PLAN --with multiple values can get a nested loop. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN ( VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -585,10 +611,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -596,9 +622,9 @@ QUERY PLAN RESET enable_hashjoin; :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1)); QUERY PLAN - Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=1) + Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=1) Output: _hyper_X_X_chunk.device_id - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=1) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = 1) (5 rows) @@ -606,7 +632,7 @@ QUERY PLAN --with multiple values can get a semi-join or nested loop depending on seq_page_cost. :PREFIX_VERBOSE SELECT device_id FROM :TEST_TABLE WHERE device_id IN (VALUES (1), (2)); QUERY PLAN - Nested Loop (actual rows=7196 loops=1) + Nested Loop (actual rows=14392 loops=1) Output: _hyper_X_X_chunk.device_id -> Unique (actual rows=2 loops=1) Output: "*VALUES*".column1 @@ -616,10 +642,10 @@ QUERY PLAN Sort Method: quicksort -> Values Scan on "*VALUES*" (actual rows=2 loops=1) Output: "*VALUES*".column1 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=3598 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk (actual rows=7196 loops=2) Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=4 loops=2) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk (actual rows=8 loops=2) Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (16 rows) @@ -640,7 +666,7 @@ QUERY PLAN -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_X_X_chunk Output: _hyper_X_X_chunk.device_id Filter: ("*VALUES*".column1 = _hyper_X_X_chunk.device_id) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on _timescaledb_internal.compress_hyper_X_X_chunk + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on _timescaledb_internal.compress_hyper_X_X_chunk Output: compress_hyper_X_X_chunk."time", compress_hyper_X_X_chunk.device_id, compress_hyper_X_X_chunk.v0, compress_hyper_X_X_chunk.v1, compress_hyper_X_X_chunk.v2, compress_hyper_X_X_chunk.v3, compress_hyper_X_X_chunk._ts_meta_count, compress_hyper_X_X_chunk._ts_meta_sequence_num, compress_hyper_X_X_chunk._ts_meta_min_1, compress_hyper_X_X_chunk._ts_meta_max_1 Index Cond: (compress_hyper_X_X_chunk.device_id = "*VALUES*".column1) (15 rows) @@ -652,7 +678,7 @@ CREATE OR REPLACE VIEW compressed_view AS SELECT time, device_id, v1, v2 FROM :T QUERY PLAN Limit (actual rows=10 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=10 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) (4 rows) @@ -670,18 +696,18 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=588 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) (15 rows) :PREFIX @@ -698,23 +724,23 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop (actual rows=10 loops=1) Join Filter: (m1."time" = m3."time") - Rows Removed by Join Filter: 35969 + Rows Removed by Join Filter: 71949 -> Nested Loop (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=586 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=7196 loops=10) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=8 loops=10) Index Cond: (device_id = 3) (21 rows) @@ -734,11 +760,11 @@ QUERY PLAN -> Merge Join (actual rows=100 loops=1) Merge Cond: (m1."time" = m2."time") -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=1 loops=1) Index Cond: (device_id = 1) -> Materialize (actual rows=100 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=100 loops=1) - -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) + -> Index Scan Backward using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=1 loops=1) Index Cond: (device_id = 2) (10 rows) @@ -789,18 +815,18 @@ QUERY PLAN Limit (actual rows=10 loops=1) -> Nested Loop Left Join (actual rows=10 loops=1) Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - Rows Removed by Join Filter: 179889 + Rows Removed by Join Filter: 359789 -> Gather Merge (actual rows=10 loops=1) Workers Planned: 1 Workers Launched: 1 - -> Sort (actual rows=5 loops=2) + -> Sort (actual rows=588 loops=2) Sort Key: m1."time", m1.device_id Sort Method: quicksort Worker 0: Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) - -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=10) (15 rows) :PREFIX @@ -816,25 +842,25 @@ ORDER BY m1.time, LIMIT 100; 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 - Presorted Key: m1."time" - Full-sort Groups: 3 Sort Method: quicksort - -> Merge Left Join (actual rows=101 loops=1) - Merge Cond: (m1."time" = m2."time") - Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 81 - -> Sort (actual rows=101 loops=1) - Sort Key: m1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Sort (actual rows=102 loops=1) - Sort Key: m2."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - Index Cond: (device_id = 2) + -> Gather Merge (actual rows=100 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=51 loops=2) + Sort Key: m1."time", m1.device_id, m2."time", m2.device_id + Sort Method: top-N heapsort + Worker 0: Sort Method: top-N heapsort + -> Parallel Hash Left Join (actual rows=17990 loops=2) + Hash Cond: (m1."time" = m2."time") + Join Filter: (m1.device_id = 1) + Rows Removed by Join Filter: 14392 + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=2) + -> Parallel Hash (actual rows=3598 loops=2) + Buckets: 8192 (originally 2048) Batches: 1 (originally 1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=7196 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=8 loops=1) + Filter: (device_id = 2) + Rows Removed by Filter: 32 (20 rows) SET parallel_leader_participation TO false; @@ -851,23 +877,22 @@ ORDER BY m1.time, LIMIT 20; QUERY PLAN Limit (actual rows=20 loops=1) - -> Incremental Sort (actual rows=20 loops=1) + -> Sort (actual rows=20 loops=1) Sort Key: m1."time", m1.device_id, m2.device_id - Presorted Key: m1."time" - Full-sort Groups: 1 Sort Method: quicksort - -> Merge Join (actual rows=26 loops=1) + Sort Method: top-N heapsort + -> Merge Join (actual rows=179900 loops=1) Merge Cond: (m1."time" = m2."time") - -> Sort (actual rows=6 loops=1) + -> Sort (actual rows=35980 loops=1) Sort Key: m1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Sort (actual rows=26 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) + -> Sort (actual rows=179896 loops=1) Sort Key: m2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(17 rows) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) +(16 rows) -- test self-join with sub-query :PREFIX @@ -884,23 +909,22 @@ ORDER BY m1.time, LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Incremental Sort (actual rows=10 loops=1) + -> Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id, m2.device_id - Presorted Key: m1."time" - Full-sort Groups: 1 Sort Method: top-N heapsort - -> Merge Join (actual rows=26 loops=1) + Sort Method: top-N heapsort + -> Merge Join (actual rows=179900 loops=1) Merge Cond: (m1."time" = m2."time") - -> Sort (actual rows=6 loops=1) + -> Sort (actual rows=35980 loops=1) Sort Key: m1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Sort (actual rows=26 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=40 loops=1) + -> Sort (actual rows=179896 loops=1) Sort Key: m2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(17 rows) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=35980 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=40 loops=1) +(16 rows) RESET parallel_leader_participation; :PREFIX @@ -917,10 +941,10 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 + Rows Removed by Filter: 99 -> Seq Scan on compress_hyper_X_X_chunk (actual rows=0 loops=32) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 17 + Rows Removed by Filter: 34 (9 rows) -- test prepared statement @@ -929,39 +953,39 @@ PREPARE prep AS SELECT count(time) FROM :TEST_TABLE WHERE device_id = 1; :PREFIX EXECUTE prep; QUERY PLAN Aggregate (actual rows=1 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=7196 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=8 loops=1) Index Cond: (device_id = 1) (4 rows) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) EXECUTE prep; count - 3598 + 7196 (1 row) DEALLOCATE prep; @@ -982,11 +1006,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) :PREFIX EXECUTE param_prep (2); @@ -996,11 +1020,11 @@ QUERY PLAN -> Limit (actual rows=0 loops=32) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=0 loops=32) Filter: ("time" = g."time") - Rows Removed by Filter: 81 - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=0 loops=32) + Rows Removed by Filter: 99 + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_23_device_id_ on compress_hyper_X_X_chunk (actual rows=0 loops=32) Index Cond: (device_id = $1) Filter: ((_ts_meta_min_1 <= g."time") AND (_ts_meta_max_1 >= g."time")) - Rows Removed by Filter: 4 + Rows Removed by Filter: 7 (10 rows) EXECUTE param_prep (1); @@ -1055,3 +1079,5 @@ EXECUTE param_prep (1); DEALLOCATE param_prep; RESET plan_cache_mode; +DROP TABLE test_metrics_compressed cascade; +NOTICE: drop cascades to 3 other objects diff --git a/tsl/test/shared/sql/transparent_decompress_chunk.sql.in b/tsl/test/shared/sql/transparent_decompress_chunk.sql.in index 5da7f9247a6..c68dd0b5a2d 100644 --- a/tsl/test/shared/sql/transparent_decompress_chunk.sql.in +++ b/tsl/test/shared/sql/transparent_decompress_chunk.sql.in @@ -6,7 +6,29 @@ \set PREFIX_VERBOSE 'EXPLAIN (analyze, costs off, timing off, summary off, verbose)' \set PREFIX_NO_ANALYZE 'EXPLAIN (verbose, costs off)' -SELECT show_chunks('metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset +CREATE TABLE test_metrics_compressed(filler_1 int, filler_2 int, filler_3 int, time timestamptz NOT NULL, device_id int, v0 int, v1 int, v2 float, v3 float); +CREATE INDEX ON test_metrics_compressed(time); +CREATE INDEX ON test_metrics_compressed(device_id,time); +SELECT create_hypertable('test_metrics_compressed','time',create_default_indexes:=false); + +ALTER TABLE test_metrics_compressed DROP COLUMN filler_1; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id+1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_2; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id-1, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); +ALTER TABLE test_metrics_compressed DROP COLUMN filler_3; +INSERT INTO test_metrics_compressed(time,device_id,v0,v1,v2,v3) SELECT time, device_id, device_id, 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','1m') gtime(time), generate_series(1,5,1) gdevice(device_id); + + + +ALTER TABLE test_metrics_compressed SET (timescaledb.compress, timescaledb.compress_orderby='time DESC', timescaledb.compress_segmentby='device_id'); +SELECT compress_chunk(c.schema_name|| '.' || c.table_name) +FROM _timescaledb_catalog.chunk c, _timescaledb_catalog.hypertable ht where c.hypertable_id = ht.id and ht.table_name = 'test_metrics_compressed' and c.compressed_chunk_id IS NULL +ORDER BY c.table_name DESC; + +VACUUM test_metrics_compressed; +ANALYZE test_metrics_compressed; + +SELECT show_chunks('test_metrics_compressed') AS "TEST_TABLE" ORDER BY 1::text LIMIT 1 \gset -- this should use DecompressChunk node :PREFIX_VERBOSE @@ -324,3 +346,4 @@ EXECUTE param_prep (2); EXECUTE param_prep (1); DEALLOCATE param_prep; RESET plan_cache_mode; +DROP TABLE test_metrics_compressed cascade;