diff --git a/tsl/src/nodes/decompress_chunk/decompress_chunk.c b/tsl/src/nodes/decompress_chunk/decompress_chunk.c index ac2c7873422..121d0182a0c 100644 --- a/tsl/src/nodes/decompress_chunk/decompress_chunk.c +++ b/tsl/src/nodes/decompress_chunk/decompress_chunk.c @@ -430,12 +430,14 @@ static void cost_decompress_chunk(PlannerInfo *root, Path *path, Path *compressed_path) { /* startup_cost is cost before fetching first tuple */ - if (compressed_path->rows > 0) - path->startup_cost = compressed_path->total_cost / compressed_path->rows; + const double compressed_rows = Max(1, compressed_path->rows); + path->startup_cost = + compressed_path->startup_cost + + (compressed_path->total_cost - compressed_path->startup_cost) / compressed_rows; /* total_cost is cost for fetching all tuples */ - path->total_cost = compressed_path->total_cost + path->rows * cpu_tuple_cost; path->rows = compressed_path->rows * TARGET_COMPRESSED_BATCH_SIZE; + path->total_cost = compressed_path->total_cost + path->rows * cpu_tuple_cost; } /* Smoothstep function S1 (the h01 cubic Hermite spline). */ diff --git a/tsl/src/nodes/vector_agg/exec.c b/tsl/src/nodes/vector_agg/exec.c index 6d9b08fee65..ad9983fa95d 100644 --- a/tsl/src/nodes/vector_agg/exec.c +++ b/tsl/src/nodes/vector_agg/exec.c @@ -310,9 +310,21 @@ vector_agg_exec(CustomScanState *node) compressed_batch_set_compressed_tuple(dcontext, batch_state, compressed_slot); + /* + * This is required for the proper EXPLAIN output for the underlying + * DecompressChunk node. In normal Postgres plan execution, it is + * updated by InstrStopNode() and used in InstrEndLoop(). + */ + if (dcontext->ps->instrument) + { + dcontext->ps->instrument->running = true; + } + + /* + * Skip the batch if it was fully filtered out by the vectorized filters. + */ if (batch_state->next_batch_row >= batch_state->total_batch_rows) { - /* This batch was fully filtered out. */ continue; } @@ -327,13 +339,14 @@ vector_agg_exec(CustomScanState *node) const int not_filtered_rows = arrow_num_valid(batch_state->vector_qual_result, batch_state->total_batch_rows); InstrCountFiltered1(dcontext->ps, batch_state->total_batch_rows - not_filtered_rows); + + /* + * This is required for the proper EXPLAIN output for the underlying + * DecompressChunk node. In normal Postgres plan execution, it is + * updated by InstrStopNode() and used in InstrEndLoop(). + */ if (dcontext->ps->instrument) { - /* - * These values are normally updated by InstrStopNode(), and are - * required so that the calculations in InstrEndLoop() run properly. - */ - dcontext->ps->instrument->running = true; dcontext->ps->instrument->tuplecount += not_filtered_rows; } diff --git a/tsl/test/expected/compress_auto_sparse_index.out b/tsl/test/expected/compress_auto_sparse_index.out index f140d8dc0fd..7c189434b35 100644 --- a/tsl/test/expected/compress_auto_sparse_index.out +++ b/tsl/test/expected/compress_auto_sparse_index.out @@ -23,12 +23,12 @@ select count(compress_chunk(x)) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.27..20.20 rows=76000 width=12) + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_2_chunk (cost=0.00..20.20 rows=76 width=76) + -> Seq Scan on compress_hyper_2_2_chunk Filter: ((_ts_meta_v2_min_value <= '1'::double precision) AND (_ts_meta_v2_max_value >= '1'::double precision)) (4 rows) @@ -40,12 +40,12 @@ select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; - QUERY PLAN --------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.02..17.80 rows=780000 width=12) +explain (costs off) select * from sparse where value = 1; + QUERY PLAN +------------------------------------------------------ + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_3_chunk (cost=0.00..17.80 rows=780 width=76) + -> Seq Scan on compress_hyper_2_3_chunk (3 rows) reset timescaledb.auto_sparse_indexes; @@ -55,33 +55,33 @@ select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.27..20.20 rows=76000 width=12) + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_4_chunk (cost=0.00..20.20 rows=76 width=76) + -> Seq Scan on compress_hyper_2_4_chunk Filter: ((_ts_meta_v2_min_value <= '1'::double precision) AND (_ts_meta_v2_max_value >= '1'::double precision)) (4 rows) -- Should survive renames. alter table sparse rename column value to wert; -explain select * from sparse where wert = 1; +explain (costs off) select * from sparse where wert = 1; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.27..20.20 rows=76000 width=12) + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (wert = '1'::double precision) - -> Seq Scan on compress_hyper_2_4_chunk (cost=0.00..20.20 rows=76 width=76) + -> Seq Scan on compress_hyper_2_4_chunk Filter: ((_ts_meta_v2_min_wert <= '1'::double precision) AND (_ts_meta_v2_max_wert >= '1'::double precision)) (4 rows) alter table sparse rename column wert to value; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.27..20.20 rows=76000 width=12) + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_4_chunk (cost=0.00..20.20 rows=76 width=76) + -> Seq Scan on compress_hyper_2_4_chunk Filter: ((_ts_meta_v2_min_value <= '1'::double precision) AND (_ts_meta_v2_max_value >= '1'::double precision)) (4 rows) @@ -94,12 +94,12 @@ select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; - QUERY PLAN --------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.02..17.80 rows=780000 width=12) +explain (costs off) select * from sparse where value = 1; + QUERY PLAN +------------------------------------------------------ + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_5_chunk (cost=0.00..17.80 rows=780 width=76) + -> Seq Scan on compress_hyper_2_5_chunk (3 rows) -- Not for other index types. @@ -111,12 +111,12 @@ select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; - QUERY PLAN --------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.02..17.80 rows=780000 width=12) +explain (costs off) select * from sparse where value = 1; + QUERY PLAN +------------------------------------------------------ + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_6_chunk (cost=0.00..17.80 rows=780 width=76) + -> Seq Scan on compress_hyper_2_6_chunk (3 rows) -- When the chunk is recompressed without index, no sparse index is created. @@ -127,12 +127,12 @@ select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where value = 1; - QUERY PLAN --------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=0.02..17.80 rows=780000 width=12) +explain (costs off) select * from sparse where value = 1; + QUERY PLAN +------------------------------------------------------ + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (value = '1'::double precision) - -> Seq Scan on compress_hyper_2_7_chunk (cost=0.00..17.80 rows=780 width=76) + -> Seq Scan on compress_hyper_2_7_chunk (3 rows) -- Long column names. @@ -149,12 +149,12 @@ select count(compress_chunk(x)) from show_chunks('sparse') x; 1 (1 row) -explain select * from sparse where Abcdef012345678_Bbcdef012345678_Cbcdef012345678_Dbcdef0 = 1; +explain (costs off) select * from sparse where Abcdef012345678_Bbcdef012345678_Cbcdef012345678_Dbcdef0 = 1; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------- - Custom Scan (DecompressChunk) on _hyper_1_1_chunk (cost=3.48..10.45 rows=3000 width=264) + Custom Scan (DecompressChunk) on _hyper_1_1_chunk Vectorized Filter: (abcdef012345678_bbcdef012345678_cbcdef012345678_dbcdef0 = 1) - -> Seq Scan on compress_hyper_2_8_chunk (cost=0.00..10.45 rows=3 width=2092) + -> Seq Scan on compress_hyper_2_8_chunk Filter: ((_ts_meta_v2_min_9218_abcdef012345678_bbcdef012345678_cbcdef0 <= 1) AND (_ts_meta_v2_max_9218_abcdef012345678_bbcdef012345678_cbcdef0 >= 1)) (4 rows) diff --git a/tsl/test/expected/compression.out b/tsl/test/expected/compression.out index fc5e0ec56db..a09a7e9958a 100644 --- a/tsl/test/expected/compression.out +++ b/tsl/test/expected/compression.out @@ -1859,10 +1859,6 @@ SELECT sum(cpu) FROM f_sensor_data; Output: (PARTIAL sum(_hyper_37_73_chunk.cpu)) Workers Planned: 4 -> Parallel Append - -> Partial Aggregate - Output: PARTIAL sum(_hyper_37_73_chunk.cpu) - -> Parallel Seq Scan on _timescaledb_internal._hyper_37_73_chunk - Output: _hyper_37_73_chunk.cpu -> Custom Scan (VectorAgg) Output: (PARTIAL sum(_hyper_37_73_chunk.cpu)) Grouping Policy: all compressed batches @@ -1870,6 +1866,10 @@ SELECT sum(cpu) FROM f_sensor_data; Output: _hyper_37_73_chunk.cpu -> Parallel Seq Scan on _timescaledb_internal.compress_hyper_38_74_chunk Output: compress_hyper_38_74_chunk._ts_meta_count, compress_hyper_38_74_chunk.sensor_id, compress_hyper_38_74_chunk._ts_meta_min_1, compress_hyper_38_74_chunk._ts_meta_max_1, compress_hyper_38_74_chunk."time", compress_hyper_38_74_chunk.cpu, compress_hyper_38_74_chunk.temperature + -> Partial Aggregate + Output: PARTIAL sum(_hyper_37_73_chunk.cpu) + -> Parallel Seq Scan on _timescaledb_internal._hyper_37_73_chunk + Output: _hyper_37_73_chunk.cpu (17 rows) :explain @@ -1880,15 +1880,15 @@ SELECT * FROM f_sensor_data WHERE sensor_id > 100; Output: _hyper_37_73_chunk."time", _hyper_37_73_chunk.sensor_id, _hyper_37_73_chunk.cpu, _hyper_37_73_chunk.temperature Workers Planned: 3 -> Parallel Append - -> Parallel Index Scan using _hyper_37_73_chunk_f_sensor_data_time_sensor_id_idx on _timescaledb_internal._hyper_37_73_chunk - Output: _hyper_37_73_chunk."time", _hyper_37_73_chunk.sensor_id, _hyper_37_73_chunk.cpu, _hyper_37_73_chunk.temperature - Index Cond: (_hyper_37_73_chunk.sensor_id > 100) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_37_73_chunk Output: _hyper_37_73_chunk."time", _hyper_37_73_chunk.sensor_id, _hyper_37_73_chunk.cpu, _hyper_37_73_chunk.temperature Filter: (_hyper_37_73_chunk.sensor_id > 100) -> Parallel Index Scan using compress_hyper_38_74_chunk_sensor_id__ts_meta_min_1__ts_met_idx on _timescaledb_internal.compress_hyper_38_74_chunk Output: compress_hyper_38_74_chunk._ts_meta_count, compress_hyper_38_74_chunk.sensor_id, compress_hyper_38_74_chunk._ts_meta_min_1, compress_hyper_38_74_chunk._ts_meta_max_1, compress_hyper_38_74_chunk."time", compress_hyper_38_74_chunk.cpu, compress_hyper_38_74_chunk.temperature Index Cond: (compress_hyper_38_74_chunk.sensor_id > 100) + -> Parallel Index Scan using _hyper_37_73_chunk_f_sensor_data_time_sensor_id_idx on _timescaledb_internal._hyper_37_73_chunk + Output: _hyper_37_73_chunk."time", _hyper_37_73_chunk.sensor_id, _hyper_37_73_chunk.cpu, _hyper_37_73_chunk.temperature + Index Cond: (_hyper_37_73_chunk.sensor_id > 100) (13 rows) -- Test non-partial paths below append are not executed multiple times @@ -2802,7 +2802,7 @@ COPY compressed_table (time,a,b,c) FROM stdin; ERROR: duplicate key value violates unique constraint "_hyper_49_108_chunk_compressed_table_index" \set ON_ERROR_STOP 1 COPY compressed_table (time,a,b,c) FROM stdin; -SELECT * FROM compressed_table; +SELECT * FROM compressed_table ORDER BY a; time | a | b | c ------------------------------------+----+---+--- Thu Feb 29 01:00:00 2024 PST | 5 | 1 | 1 diff --git a/tsl/test/expected/compression_qualpushdown.out b/tsl/test/expected/compression_qualpushdown.out index 7914e82cd06..3114e1dabce 100644 --- a/tsl/test/expected/compression_qualpushdown.out +++ b/tsl/test/expected/compression_qualpushdown.out @@ -1,6 +1,7 @@ -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. +set max_parallel_workers_per_gather = 0; -- qual pushdown tests for decompresschunk --- -- Test qual pushdown with ints CREATE TABLE meta (device_id INT PRIMARY KEY); @@ -268,6 +269,7 @@ EXPLAIN (costs off) SELECT * FROM pushdown_relabel WHERE dev_vc = 'varchar'::cha Filter: ((dev_vc)::bpchar = 'varchar '::character(10)) (4 rows) +RESET enable_seqscan; -- github issue #5286 CREATE TABLE deleteme AS SELECT generate_series AS timestamp, 1 AS segment, 0 AS data @@ -292,6 +294,7 @@ SELECT compress_chunk(i) FROM show_chunks('deleteme') i; _timescaledb_internal._hyper_7_8_chunk (1 row) +VACUUM ANALYZE deleteme; EXPLAIN (costs off) SELECT sum(data) FROM deleteme WHERE segment::text like '%4%'; QUERY PLAN --------------------------------------------------------- @@ -368,95 +371,96 @@ SELECT compress_chunk(show_chunks('svf_pushdown')); _timescaledb_internal._hyper_11_12_chunk (1 row) +VACUUM ANALYZE svf_pushdown; -- constraints should be pushed down into scan below decompresschunk in all cases EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_date = CURRENT_DATE; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_date = CURRENT_DATE) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_date = CURRENT_DATE) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timetz = CURRENT_TIME; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timetz = CURRENT_TIME) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timetz = CURRENT_TIME) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timetz = CURRENT_TIME(1); - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timetz = CURRENT_TIME(1)) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timetz = CURRENT_TIME(1)) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timestamp = CURRENT_TIMESTAMP; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timestamp = CURRENT_TIMESTAMP) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timestamp = CURRENT_TIMESTAMP) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timestamp = CURRENT_TIMESTAMP(1); - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------ Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timestamp = CURRENT_TIMESTAMP(1)) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timestamp = CURRENT_TIMESTAMP(1)) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_time = LOCALTIME; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_time = LOCALTIME) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_time = LOCALTIME) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_time = LOCALTIME(1); - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_time = LOCALTIME(1)) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_time = LOCALTIME(1)) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timestamp = LOCALTIMESTAMP; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timestamp = LOCALTIMESTAMP) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timestamp = LOCALTIMESTAMP) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_timestamp = LOCALTIMESTAMP(1); - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------- Custom Scan (ChunkAppend) on svf_pushdown Chunks excluded during startup: 0 -> Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_timestamp = LOCALTIMESTAMP(1)) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (c_timestamp = LOCALTIMESTAMP(1)) (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_name = USER; @@ -520,35 +524,35 @@ EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_name = CURRENT_SCHEMA; (5 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_bool; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------- Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_bool = true) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: c_bool (3 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_bool = true; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------- Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_bool = true) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: c_bool (3 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_bool = false; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------- Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_bool = false) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (NOT c_bool) (3 rows) EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE NOT c_bool; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------- Custom Scan (DecompressChunk) on _hyper_11_12_chunk - -> Index Scan using compress_hyper_12_13_chunk_c_date_c_time_c_timetz_c_timesta_idx on compress_hyper_12_13_chunk - Index Cond: (c_bool = false) + -> Seq Scan on compress_hyper_12_13_chunk + Filter: (NOT c_bool) (3 rows) -- current_query() is not a sqlvaluefunction and volatile so should not be pushed down @@ -574,3 +578,4 @@ LATERAL( -- (1 row) +DROP TABLE svf_pushdown; diff --git a/tsl/test/expected/compression_sequence_num_removal.out b/tsl/test/expected/compression_sequence_num_removal.out index 49c102455cf..f7f45d3922d 100644 --- a/tsl/test/expected/compression_sequence_num_removal.out +++ b/tsl/test/expected/compression_sequence_num_removal.out @@ -168,27 +168,33 @@ SET ROLE :ROLE_DEFAULT_PERM_USER; -- output with sequence number chunks, should match output without sequence numbers above :EXPLAIN SELECT * FROM hyper ORDER BY device_id, time; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.val - -> Index Scan using compress_hyper_2_5_chunk_device_id__ts_meta_sequence_num_idx on _timescaledb_internal.compress_hyper_2_5_chunk + -> Sort Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num + Sort Key: compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_sequence_num + -> Seq Scan on _timescaledb_internal.compress_hyper_2_5_chunk + Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.val -> Index Scan using compress_hyper_2_6_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_6_chunk Output: compress_hyper_2_6_chunk._ts_meta_count, compress_hyper_2_6_chunk.device_id, compress_hyper_2_6_chunk._ts_meta_min_1, compress_hyper_2_6_chunk._ts_meta_max_1, compress_hyper_2_6_chunk."time", compress_hyper_2_6_chunk.val -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.val - -> Index Scan using compress_hyper_2_7_chunk_device_id__ts_meta_sequence_num_idx on _timescaledb_internal.compress_hyper_2_7_chunk + -> Sort Output: compress_hyper_2_7_chunk._ts_meta_count, compress_hyper_2_7_chunk.device_id, compress_hyper_2_7_chunk._ts_meta_min_1, compress_hyper_2_7_chunk._ts_meta_max_1, compress_hyper_2_7_chunk."time", compress_hyper_2_7_chunk.val, compress_hyper_2_7_chunk._ts_meta_sequence_num + Sort Key: compress_hyper_2_7_chunk.device_id, compress_hyper_2_7_chunk._ts_meta_sequence_num + -> Seq Scan on _timescaledb_internal.compress_hyper_2_7_chunk + Output: compress_hyper_2_7_chunk._ts_meta_count, compress_hyper_2_7_chunk.device_id, compress_hyper_2_7_chunk._ts_meta_min_1, compress_hyper_2_7_chunk._ts_meta_max_1, compress_hyper_2_7_chunk."time", compress_hyper_2_7_chunk.val, compress_hyper_2_7_chunk._ts_meta_sequence_num -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_4_chunk Output: _hyper_1_4_chunk."time", _hyper_1_4_chunk.device_id, _hyper_1_4_chunk.val -> Index Scan using compress_hyper_2_8_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_8_chunk Output: compress_hyper_2_8_chunk._ts_meta_count, compress_hyper_2_8_chunk.device_id, compress_hyper_2_8_chunk._ts_meta_min_1, compress_hyper_2_8_chunk._ts_meta_max_1, compress_hyper_2_8_chunk."time", compress_hyper_2_8_chunk.val -(18 rows) +(24 rows) SELECT * FROM hyper ORDER BY device_id, time; @@ -211,27 +217,33 @@ ORDER BY device_id, time; -- backwards index scan :EXPLAIN SELECT * FROM hyper ORDER BY device_id DESC, time DESC; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append Sort Key: _hyper_1_1_chunk.device_id DESC, _hyper_1_1_chunk."time" DESC -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.val - -> Index Scan Backward using compress_hyper_2_5_chunk_device_id__ts_meta_sequence_num_idx on _timescaledb_internal.compress_hyper_2_5_chunk + -> Sort Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num + Sort Key: compress_hyper_2_5_chunk.device_id DESC, compress_hyper_2_5_chunk._ts_meta_sequence_num DESC + -> Seq Scan on _timescaledb_internal.compress_hyper_2_5_chunk + Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.val -> Index Scan Backward using compress_hyper_2_6_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_6_chunk Output: compress_hyper_2_6_chunk._ts_meta_count, compress_hyper_2_6_chunk.device_id, compress_hyper_2_6_chunk._ts_meta_min_1, compress_hyper_2_6_chunk._ts_meta_max_1, compress_hyper_2_6_chunk."time", compress_hyper_2_6_chunk.val -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.val - -> Index Scan Backward using compress_hyper_2_7_chunk_device_id__ts_meta_sequence_num_idx on _timescaledb_internal.compress_hyper_2_7_chunk + -> Sort Output: compress_hyper_2_7_chunk._ts_meta_count, compress_hyper_2_7_chunk.device_id, compress_hyper_2_7_chunk._ts_meta_min_1, compress_hyper_2_7_chunk._ts_meta_max_1, compress_hyper_2_7_chunk."time", compress_hyper_2_7_chunk.val, compress_hyper_2_7_chunk._ts_meta_sequence_num + Sort Key: compress_hyper_2_7_chunk.device_id DESC, compress_hyper_2_7_chunk._ts_meta_sequence_num DESC + -> Seq Scan on _timescaledb_internal.compress_hyper_2_7_chunk + Output: compress_hyper_2_7_chunk._ts_meta_count, compress_hyper_2_7_chunk.device_id, compress_hyper_2_7_chunk._ts_meta_min_1, compress_hyper_2_7_chunk._ts_meta_max_1, compress_hyper_2_7_chunk."time", compress_hyper_2_7_chunk.val, compress_hyper_2_7_chunk._ts_meta_sequence_num -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_4_chunk Output: _hyper_1_4_chunk."time", _hyper_1_4_chunk.device_id, _hyper_1_4_chunk.val -> Index Scan Backward using compress_hyper_2_8_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_8_chunk Output: compress_hyper_2_8_chunk._ts_meta_count, compress_hyper_2_8_chunk.device_id, compress_hyper_2_8_chunk._ts_meta_min_1, compress_hyper_2_8_chunk._ts_meta_max_1, compress_hyper_2_8_chunk."time", compress_hyper_2_8_chunk.val -(18 rows) +(24 rows) SELECT * FROM hyper ORDER BY device_id DESC, time DESC; @@ -270,14 +282,17 @@ NOTICE: chunk "_hyper_1_4_chunk" is already compressed -- reflected in this plan :EXPLAIN SELECT * FROM hyper ORDER BY device_id, time; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append Sort Key: _hyper_1_1_chunk.device_id, _hyper_1_1_chunk."time" -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.val - -> Index Scan using compress_hyper_2_5_chunk_device_id__ts_meta_sequence_num_idx on _timescaledb_internal.compress_hyper_2_5_chunk + -> Sort Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num + Sort Key: compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_sequence_num + -> Seq Scan on _timescaledb_internal.compress_hyper_2_5_chunk + Output: compress_hyper_2_5_chunk._ts_meta_count, compress_hyper_2_5_chunk.device_id, compress_hyper_2_5_chunk._ts_meta_min_1, compress_hyper_2_5_chunk._ts_meta_max_1, compress_hyper_2_5_chunk."time", compress_hyper_2_5_chunk.val, compress_hyper_2_5_chunk._ts_meta_sequence_num -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_2_chunk Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.val -> Index Scan using compress_hyper_2_6_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_6_chunk @@ -290,7 +305,7 @@ ORDER BY device_id, time; Output: _hyper_1_4_chunk."time", _hyper_1_4_chunk.device_id, _hyper_1_4_chunk.val -> Index Scan using compress_hyper_2_8_chunk_device_id__ts_meta_min_1__ts_meta__idx on _timescaledb_internal.compress_hyper_2_8_chunk Output: compress_hyper_2_8_chunk._ts_meta_count, compress_hyper_2_8_chunk.device_id, compress_hyper_2_8_chunk._ts_meta_min_1, compress_hyper_2_8_chunk._ts_meta_max_1, compress_hyper_2_8_chunk."time", compress_hyper_2_8_chunk.val -(18 rows) +(21 rows) -- test case without segmentby TRUNCATE hyper; diff --git a/tsl/test/expected/compression_sorted_merge-14.out b/tsl/test/expected/compression_sorted_merge-14.out index a33c257c7f1..0acd28ed6eb 100644 --- a/tsl/test/expected/compression_sorted_merge-14.out +++ b/tsl/test/expected/compression_sorted_merge-14.out @@ -825,18 +825,18 @@ SELECT time,x3 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) @@ -850,18 +850,18 @@ SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) diff --git a/tsl/test/expected/compression_sorted_merge-15.out b/tsl/test/expected/compression_sorted_merge-15.out index 820201eb414..baa9f4dda95 100644 --- a/tsl/test/expected/compression_sorted_merge-15.out +++ b/tsl/test/expected/compression_sorted_merge-15.out @@ -825,18 +825,18 @@ SELECT time,x3 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) @@ -850,18 +850,18 @@ SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) diff --git a/tsl/test/expected/compression_sorted_merge-16.out b/tsl/test/expected/compression_sorted_merge-16.out index 820201eb414..baa9f4dda95 100644 --- a/tsl/test/expected/compression_sorted_merge-16.out +++ b/tsl/test/expected/compression_sorted_merge-16.out @@ -825,18 +825,18 @@ SELECT time,x3 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) @@ -850,18 +850,18 @@ SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) diff --git a/tsl/test/expected/compression_sorted_merge-17.out b/tsl/test/expected/compression_sorted_merge-17.out index 820201eb414..baa9f4dda95 100644 --- a/tsl/test/expected/compression_sorted_merge-17.out +++ b/tsl/test/expected/compression_sorted_merge-17.out @@ -825,18 +825,18 @@ SELECT time,x3 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.x2 Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) @@ -850,18 +850,18 @@ SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; (4 rows) -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Result (cost=1.06..93.44 rows=3000 width=24) + Result Output: 1, 2, 3, _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (cost=1.06..63.44 rows=3000 width=12) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk Output: _hyper_1_1_chunk.x2, _hyper_1_1_chunk."time" Batch Sorted Merge: true - -> Sort (cost=1.05..1.06 rows=3 width=56) + -> Sort Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 Sort Key: compress_hyper_2_2_chunk._ts_meta_max_1 DESC - -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk (cost=0.00..1.03 rows=3 width=56) + -> Seq Scan on _timescaledb_internal.compress_hyper_2_2_chunk Output: compress_hyper_2_2_chunk._ts_meta_count, compress_hyper_2_2_chunk.x1, compress_hyper_2_2_chunk.x2, compress_hyper_2_2_chunk.x5, compress_hyper_2_2_chunk._ts_meta_min_1, compress_hyper_2_2_chunk._ts_meta_max_1, compress_hyper_2_2_chunk."time", compress_hyper_2_2_chunk._ts_meta_min_2, compress_hyper_2_2_chunk._ts_meta_max_2, compress_hyper_2_2_chunk.x3, compress_hyper_2_2_chunk._ts_meta_min_3, compress_hyper_2_2_chunk._ts_meta_max_3, compress_hyper_2_2_chunk.x4 (10 rows) diff --git a/tsl/test/expected/compression_sorted_merge_distinct.out b/tsl/test/expected/compression_sorted_merge_distinct.out index f9bed904257..931a6f08970 100644 --- a/tsl/test/expected/compression_sorted_merge_distinct.out +++ b/tsl/test/expected/compression_sorted_merge_distinct.out @@ -3,6 +3,7 @@ -- LICENSE-TIMESCALE for a copy of the license. -- Test that the compressed batch sorted merge plan is chosen based on the -- cardinality of the segmentby columns. +set max_parallel_workers_per_gather = 0; -- helper function: float -> pseudorandom float [0..1]. create or replace function mix(x float4) returns float4 as $$ select ((hashfloat4(x) / (pow(2., 31) - 1) + 1) / 2)::float4 $$ language sql; create table t(ts timestamp, low_card int, high_card int, value float); @@ -134,3 +135,4 @@ explain (costs off) select * from t where high_card < 10 order by ts; (5 rows) reset work_mem; +reset max_parallel_workers_per_gather; diff --git a/tsl/test/expected/transparent_decompression-14.out b/tsl/test/expected/transparent_decompression-14.out index 6f7935e9e32..724b1d965c2 100644 --- a/tsl/test/expected/transparent_decompression-14.out +++ b/tsl/test/expected/transparent_decompression-14.out @@ -748,18 +748,15 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) Rows Removed by Filter: 3595 - -> Sort (actual rows=5 loops=1) - Sort Key: compress_hyper_5_15_chunk.device_id - Sort Method: quicksort - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(9 rows) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Index Cond: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(6 rows) :PREFIX SELECT * @@ -1307,8 +1304,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" -> Sort (actual rows=2235 loops=1) @@ -1323,10 +1320,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -1407,8 +1408,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 -> Sort (actual rows=2235 loops=1) @@ -1423,10 +1424,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -1441,8 +1446,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC -> Sort (actual rows=2235 loops=1) @@ -1457,10 +1462,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -1645,15 +1654,18 @@ SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------ Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id -> Merge Append (actual rows=15 loops=1) Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1662,8 +1674,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(16 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(22 rows) -- test window functions with GROUP BY :PREFIX @@ -1671,8 +1686,8 @@ SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------ WindowAgg (actual rows=5 loops=1) -> Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id @@ -1680,7 +1695,10 @@ ORDER BY device_id; Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1689,8 +1707,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(17 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(23 rows) SET enable_hashagg = ON; -- test CTE @@ -2370,28 +2391,34 @@ WHERE device_id IN ( (2)); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=3456 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=8640 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) + -> Unique (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Sort (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Sort Key: "*VALUES*".column1 + Sort Method: quicksort + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) + Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) + Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - -> Hash (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 -(21 rows) + Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) +(27 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2481,61 +2508,58 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) -> Merge Join (actual rows=10 loops=1) - Merge Cond: (m1."time" = m3_1."time") - -> Nested Loop (actual rows=10 loops=1) - -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) - Order: m1."time", m1.device_id - -> Sort (actual rows=10 loops=1) - Sort Key: m1_1."time", m1_1.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Sort (never executed) - Sort Key: m1_2."time", m1_2.device_id - -> Seq Scan on _hyper_1_2_chunk m1_2 (never executed) - -> Sort (never executed) - Sort Key: m1_3."time", m1_3.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) - -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: (m1."time" = "time") - Rows Removed by Filter: 647 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: (m1."time" = "time") - Rows Removed by Filter: 336 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) - -> Materialize (actual rows=10 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3_1."time" - -> Sort (actual rows=3 loops=1) + Merge Cond: (m2."time" = m1_1."time") + Join Filter: (m1_1.device_id = m2.device_id) + Rows Removed by Join Filter: 40 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=10 loops=1) + Order: m2."time", m2.device_id + -> Sort (actual rows=10 loops=1) + Sort Key: m2_1."time", m2_1.device_id + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Sort (never executed) + Sort Key: m2_2."time", m2_2.device_id + -> Seq Scan on _hyper_1_2_chunk m2_2 (never executed) + -> Sort (never executed) + Sort Key: m2_3."time", m2_3.device_id + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + -> Materialize (actual rows=50 loops=1) + -> Nested Loop (actual rows=11 loops=1) + Join Filter: (m1_1."time" = m3_1."time") + Rows Removed by Join Filter: 17272 + -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2 - -> Sort (actual rows=1 loops=1) - Sort Key: m3_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 -(52 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Seq Scan on _hyper_1_2_chunk m1_2 (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1680 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(49 rows) :PREFIX SELECT * @@ -5076,8 +5100,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5093,20 +5117,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(28 rows) +(36 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -5225,8 +5257,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5242,20 +5274,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -5270,8 +5310,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5287,20 +5327,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -5618,13 +5666,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5636,14 +5693,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(35 rows) +(50 rows) -- test window functions with GROUP BY :PREFIX @@ -5660,13 +5723,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5678,14 +5750,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(36 rows) +(51 rows) SET enable_hashagg = ON; -- test CTE diff --git a/tsl/test/expected/transparent_decompression-15.out b/tsl/test/expected/transparent_decompression-15.out index 5677fa7d695..511af7efb66 100644 --- a/tsl/test/expected/transparent_decompression-15.out +++ b/tsl/test/expected/transparent_decompression-15.out @@ -748,18 +748,15 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) Rows Removed by Filter: 3595 - -> Sort (actual rows=5 loops=1) - Sort Key: compress_hyper_5_15_chunk.device_id - Sort Method: quicksort - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(9 rows) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Index Cond: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(6 rows) :PREFIX SELECT * @@ -1307,8 +1304,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" -> Sort (actual rows=2235 loops=1) @@ -1323,10 +1320,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -1407,8 +1408,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 -> Sort (actual rows=2235 loops=1) @@ -1423,10 +1424,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -1441,8 +1446,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC -> Sort (actual rows=2235 loops=1) @@ -1457,10 +1462,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -1645,15 +1654,18 @@ SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------ Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id -> Merge Append (actual rows=15 loops=1) Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1662,8 +1674,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(16 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(22 rows) -- test window functions with GROUP BY :PREFIX @@ -1671,8 +1686,8 @@ SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------ WindowAgg (actual rows=5 loops=1) -> Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id @@ -1680,7 +1695,10 @@ ORDER BY device_id; Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1689,8 +1707,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(17 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(23 rows) SET enable_hashagg = ON; -- test CTE @@ -2370,28 +2391,34 @@ WHERE device_id IN ( (2)); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=3456 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=8640 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) + -> Unique (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Sort (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Sort Key: "*VALUES*".column1 + Sort Method: quicksort + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) + Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) + Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - -> Hash (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 -(21 rows) + Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) +(27 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2481,61 +2508,58 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) -> Merge Join (actual rows=10 loops=1) - Merge Cond: (m1."time" = m3_1."time") - -> Nested Loop (actual rows=10 loops=1) - -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) - Order: m1."time", m1.device_id - -> Sort (actual rows=10 loops=1) - Sort Key: m1_1."time", m1_1.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Sort (never executed) - Sort Key: m1_2."time", m1_2.device_id - -> Seq Scan on _hyper_1_2_chunk m1_2 (never executed) - -> Sort (never executed) - Sort Key: m1_3."time", m1_3.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) - -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: (m1."time" = "time") - Rows Removed by Filter: 647 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: (m1."time" = "time") - Rows Removed by Filter: 336 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) - -> Materialize (actual rows=10 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3_1."time" - -> Sort (actual rows=3 loops=1) + Merge Cond: (m2."time" = m1_1."time") + Join Filter: (m1_1.device_id = m2.device_id) + Rows Removed by Join Filter: 40 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=10 loops=1) + Order: m2."time", m2.device_id + -> Sort (actual rows=10 loops=1) + Sort Key: m2_1."time", m2_1.device_id + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Sort (never executed) + Sort Key: m2_2."time", m2_2.device_id + -> Seq Scan on _hyper_1_2_chunk m2_2 (never executed) + -> Sort (never executed) + Sort Key: m2_3."time", m2_3.device_id + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + -> Materialize (actual rows=50 loops=1) + -> Nested Loop (actual rows=11 loops=1) + Join Filter: (m1_1."time" = m3_1."time") + Rows Removed by Join Filter: 17272 + -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2 - -> Sort (actual rows=1 loops=1) - Sort Key: m3_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 -(52 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Seq Scan on _hyper_1_2_chunk m1_2 (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1680 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(49 rows) :PREFIX SELECT * @@ -5076,8 +5100,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5093,20 +5117,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(28 rows) +(36 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -5225,8 +5257,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5242,20 +5274,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -5270,8 +5310,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5287,20 +5327,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -5618,13 +5666,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5636,14 +5693,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(35 rows) +(50 rows) -- test window functions with GROUP BY :PREFIX @@ -5660,13 +5723,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5678,14 +5750,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(36 rows) +(51 rows) SET enable_hashagg = ON; -- test CTE diff --git a/tsl/test/expected/transparent_decompression-16.out b/tsl/test/expected/transparent_decompression-16.out index c379010a68e..627f830126e 100644 --- a/tsl/test/expected/transparent_decompression-16.out +++ b/tsl/test/expected/transparent_decompression-16.out @@ -748,18 +748,15 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) Rows Removed by Filter: 3595 - -> Sort (actual rows=5 loops=1) - Sort Key: compress_hyper_5_15_chunk.device_id - Sort Method: quicksort - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(9 rows) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Index Cond: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(6 rows) :PREFIX SELECT * @@ -1307,8 +1304,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" -> Sort (actual rows=2235 loops=1) @@ -1323,10 +1320,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -1407,8 +1408,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 -> Sort (actual rows=2235 loops=1) @@ -1423,10 +1424,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -1441,8 +1446,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC -> Sort (actual rows=2235 loops=1) @@ -1457,10 +1462,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -1645,15 +1654,18 @@ SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------ Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id -> Merge Append (actual rows=15 loops=1) Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1662,8 +1674,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(16 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(22 rows) -- test window functions with GROUP BY :PREFIX @@ -1671,8 +1686,8 @@ SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------ WindowAgg (actual rows=5 loops=1) -> Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id @@ -1680,7 +1695,10 @@ ORDER BY device_id; Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1689,8 +1707,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(17 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(23 rows) SET enable_hashagg = ON; -- test CTE @@ -2370,28 +2391,34 @@ WHERE device_id IN ( (2)); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=3456 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=8640 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) + -> Unique (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Sort (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Sort Key: "*VALUES*".column1 + Sort Method: quicksort + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) + Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) + Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - -> Hash (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 -(21 rows) + Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) +(27 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2481,61 +2508,58 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) -> Merge Join (actual rows=10 loops=1) - Merge Cond: (m1."time" = m3_1."time") - -> Nested Loop (actual rows=10 loops=1) - -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) - Order: m1."time", m1.device_id - -> Sort (actual rows=10 loops=1) - Sort Key: m1_1."time", m1_1.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Sort (never executed) - Sort Key: m1_2."time", m1_2.device_id - -> Seq Scan on _hyper_1_2_chunk m1_2 (never executed) - -> Sort (never executed) - Sort Key: m1_3."time", m1_3.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) - -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: ("time" = m1."time") - Rows Removed by Filter: 647 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: ("time" = m1."time") - Rows Removed by Filter: 336 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) - -> Materialize (actual rows=10 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3_1."time" - -> Sort (actual rows=3 loops=1) + Merge Cond: (m2."time" = m1_1."time") + Join Filter: (m2.device_id = m1_1.device_id) + Rows Removed by Join Filter: 40 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=10 loops=1) + Order: m2."time", m2.device_id + -> Sort (actual rows=10 loops=1) + Sort Key: m2_1."time", m2_1.device_id + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Sort (never executed) + Sort Key: m2_2."time", m2_2.device_id + -> Seq Scan on _hyper_1_2_chunk m2_2 (never executed) + -> Sort (never executed) + Sort Key: m2_3."time", m2_3.device_id + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + -> Materialize (actual rows=50 loops=1) + -> Nested Loop (actual rows=11 loops=1) + Join Filter: (m1_1."time" = m3_1."time") + Rows Removed by Join Filter: 17272 + -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2 - -> Sort (actual rows=1 loops=1) - Sort Key: m3_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 -(52 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Seq Scan on _hyper_1_2_chunk m1_2 (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1680 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(49 rows) :PREFIX SELECT * @@ -5076,8 +5100,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5093,20 +5117,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(28 rows) +(36 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -5225,8 +5257,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5242,20 +5274,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -5270,8 +5310,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5287,20 +5327,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -5618,13 +5666,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5636,14 +5693,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(35 rows) +(50 rows) -- test window functions with GROUP BY :PREFIX @@ -5660,13 +5723,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5678,14 +5750,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(36 rows) +(51 rows) SET enable_hashagg = ON; -- test CTE diff --git a/tsl/test/expected/transparent_decompression-17.out b/tsl/test/expected/transparent_decompression-17.out index c379010a68e..627f830126e 100644 --- a/tsl/test/expected/transparent_decompression-17.out +++ b/tsl/test/expected/transparent_decompression-17.out @@ -748,18 +748,15 @@ WHERE time = '2000-01-01 1:00:00+0' ORDER BY time, device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=5 loops=1) Vectorized Filter: ("time" = 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) Rows Removed by Filter: 3595 - -> Sort (actual rows=5 loops=1) - Sort Key: compress_hyper_5_15_chunk.device_id - Sort Method: quicksort - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - Filter: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) -(9 rows) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + Index Cond: ((_ts_meta_min_3 <= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone) AND (_ts_meta_max_3 >= 'Fri Dec 31 17:00:00 1999 PST'::timestamp with time zone)) +(6 rows) :PREFIX SELECT * @@ -1307,8 +1304,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC, _hyper_1_2_chunk."time" -> Sort (actual rows=2235 loops=1) @@ -1323,10 +1320,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -1407,8 +1408,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0 -> Sort (actual rows=2235 loops=1) @@ -1423,10 +1424,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -1441,8 +1446,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1 DESC -> Sort (actual rows=2235 loops=1) @@ -1457,10 +1462,14 @@ ORDER BY device_id, Output: _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1 Vectorized Filter: (_hyper_1_3_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - Index Cond: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(17 rows) + Sort Key: compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk._ts_meta_min_2 DESC, compress_hyper_5_16_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 + Filter: (compress_hyper_5_16_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(21 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -1645,15 +1654,18 @@ SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------ Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id -> Merge Append (actual rows=15 loops=1) Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1662,8 +1674,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(16 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(22 rows) -- test window functions with GROUP BY :PREFIX @@ -1671,8 +1686,8 @@ SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------ WindowAgg (actual rows=5 loops=1) -> Finalize GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_1_chunk.device_id @@ -1680,7 +1695,10 @@ ORDER BY device_id; Sort Key: _hyper_1_1_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk (actual rows=3600 loops=1) - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_15_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) -> Partial GroupAggregate (actual rows=5 loops=1) Group Key: _hyper_1_2_chunk.device_id -> Sort (actual rows=3360 loops=1) @@ -1689,8 +1707,11 @@ ORDER BY device_id; -> Seq Scan on _hyper_1_2_chunk (actual rows=3360 loops=1) -> Custom Scan (VectorAgg) (actual rows=5 loops=1) -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk (actual rows=1680 loops=1) - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk (actual rows=5 loops=1) -(17 rows) + -> Sort (actual rows=5 loops=1) + Sort Key: compress_hyper_5_16_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(23 rows) SET enable_hashagg = ON; -- test CTE @@ -2370,28 +2391,34 @@ WHERE device_id IN ( (2)); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Hash Semi Join (actual rows=3456 loops=1) + Nested Loop (actual rows=3456 loops=1) Output: _hyper_1_1_chunk.device_id_peer - Hash Cond: (_hyper_1_1_chunk.device_id = "*VALUES*".column1) - -> Append (actual rows=8640 loops=1) - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=3600 loops=1) + -> Unique (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Sort (actual rows=2 loops=1) + Output: "*VALUES*".column1 + Sort Key: "*VALUES*".column1 + Sort Method: quicksort + -> Values Scan on "*VALUES*" (actual rows=2 loops=1) + Output: "*VALUES*".column1 + -> Append (actual rows=1728 loops=2) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=720 loops=2) Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2) Output: compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3 - -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=3360 loops=1) + Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1) + -> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=672 loops=2) Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=1680 loops=1) + Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id) + Rows Removed by Filter: 2688 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=336 loops=2) Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id Bulk Decompression: false - -> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=5 loops=1) + -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2) Output: compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk._ts_meta_min_1, compress_hyper_5_16_chunk._ts_meta_max_1, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk._ts_meta_min_2, compress_hyper_5_16_chunk._ts_meta_max_2, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3 - -> Hash (actual rows=2 loops=1) - Output: "*VALUES*".column1 - Buckets: 1024 Batches: 1 - -> Values Scan on "*VALUES*" (actual rows=2 loops=1) - Output: "*VALUES*".column1 -(21 rows) + Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1) +(27 rows) -- test view CREATE OR REPLACE VIEW compressed_view AS @@ -2481,61 +2508,58 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) -> Merge Join (actual rows=10 loops=1) - Merge Cond: (m1."time" = m3_1."time") - -> Nested Loop (actual rows=10 loops=1) - -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=10 loops=1) - Order: m1."time", m1.device_id - -> Sort (actual rows=10 loops=1) - Sort Key: m1_1."time", m1_1.device_id - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) - -> Sort (never executed) - Sort Key: m1_2."time", m1_2.device_id - -> Seq Scan on _hyper_1_2_chunk m1_2 (never executed) - -> Sort (never executed) - Sort Key: m1_3."time", m1_3.device_id - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (never executed) - -> Seq Scan on compress_hyper_5_16_chunk (never executed) - -> Append (actual rows=1 loops=10) - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1 loops=10) - Filter: ("time" = m1."time") - Rows Removed by Filter: 647 - -> Index Scan using compress_hyper_5_15_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=1 loops=10) - Index Cond: (device_id = m1.device_id) - -> Index Scan using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=0 loops=9) - Index Cond: ("time" = m1."time") - Filter: (m1.device_id = device_id) - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=0 loops=9) - Filter: ("time" = m1."time") - Rows Removed by Filter: 336 - -> Index Scan using compress_hyper_5_16_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=1 loops=9) - Index Cond: (device_id = m1.device_id) - -> Materialize (actual rows=10 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3_1."time" - -> Sort (actual rows=3 loops=1) + Merge Cond: (m2."time" = m1_1."time") + Join Filter: (m2.device_id = m1_1.device_id) + Rows Removed by Join Filter: 40 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=10 loops=1) + Order: m2."time", m2.device_id + -> Sort (actual rows=10 loops=1) + Sort Key: m2_1."time", m2_1.device_id + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Sort (never executed) + Sort Key: m2_2."time", m2_2.device_id + -> Seq Scan on _hyper_1_2_chunk m2_2 (never executed) + -> Sort (never executed) + Sort Key: m2_3."time", m2_3.device_id + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (never executed) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (never executed) + -> Materialize (actual rows=50 loops=1) + -> Nested Loop (actual rows=11 loops=1) + Join Filter: (m1_1."time" = m3_1."time") + Rows Removed by Join Filter: 17272 + -> Merge Append (actual rows=3 loops=1) Sort Key: m3_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 2 - -> Sort (actual rows=1 loops=1) - Sort Key: m3_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - Rows Removed by Filter: 4 -(52 rows) + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m3_1 (actual rows=720 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 2 + -> Sort (actual rows=1 loops=1) + Sort Key: m3_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m3_3 (actual rows=336 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + Rows Removed by Filter: 4 + -> Materialize (actual rows=5761 loops=3) + -> Append (actual rows=8640 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m1_1 (actual rows=3600 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk (actual rows=5 loops=1) + -> Seq Scan on _hyper_1_2_chunk m1_2 (actual rows=3360 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=1680 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) +(49 rows) :PREFIX SELECT * @@ -5076,8 +5100,8 @@ ORDER BY device_id, v0, v1 DESC, time; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5093,20 +5117,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(28 rows) +(36 rows) -- test order by columns not in targetlist :PREFIX_VERBOSE @@ -5225,8 +5257,8 @@ WHERE time > '2000-01-08' ORDER BY device_id, device_id_peer, v0; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0 -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5242,20 +5274,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1 + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- should produce ordered path -- only referencing PREFIX_VERBOSE should work @@ -5270,8 +5310,8 @@ ORDER BY device_id, device_id_peer, v0, v1 DESC; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Merge Append (actual rows=3915 loops=1) Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC -> Index Only Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=447 loops=1) @@ -5287,20 +5327,28 @@ ORDER BY device_id, Output: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 Vectorized Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 - Index Cond: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk._ts_meta_min_2 DESC, compress_hyper_6_20_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk._ts_meta_min_1, compress_hyper_6_20_chunk._ts_meta_max_1, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk._ts_meta_min_2, compress_hyper_6_20_chunk._ts_meta_max_2, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1008 loops=1) Output: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 Vectorized Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) Bulk Decompression: true - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 - Index Cond: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Sort Key: compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk._ts_meta_min_2 DESC, compress_hyper_6_21_chunk._ts_meta_max_2 DESC + Sort Method: quicksort + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk._ts_meta_min_1, compress_hyper_6_21_chunk._ts_meta_max_1, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk._ts_meta_min_2, compress_hyper_6_21_chunk._ts_meta_max_2, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -> Index Only Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=336 loops=1) Output: _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1 Index Cond: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(32 rows) +(40 rows) -- These plans are flaky between MergeAppend and Sort over Append. SET enable_sort TO OFF; @@ -5618,13 +5666,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5636,14 +5693,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(35 rows) +(50 rows) -- test window functions with GROUP BY :PREFIX @@ -5660,13 +5723,22 @@ ORDER BY device_id; Sort Key: _hyper_2_4_chunk.device_id -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_17_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_17_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=2160 loops=1) - -> Index Scan using compress_hyper_6_18_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_18_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=720 loops=1) - -> Index Scan using compress_hyper_6_19_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_19_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_7_chunk.device_id -> Index Only Scan Backward using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=672 loops=1) @@ -5678,14 +5750,20 @@ ORDER BY device_id; -> Index Only Scan Backward using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=672 loops=1) -> Custom Scan (VectorAgg) (actual rows=1 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=336 loops=1) - -> Index Scan using compress_hyper_6_20_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_20_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_6_20_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) -> Custom Scan (VectorAgg) (actual rows=3 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1008 loops=1) - -> Index Scan using compress_hyper_6_21_chunk_device_id_device_id_peer__ts_meta_idx on compress_hyper_6_21_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: compress_hyper_6_21_chunk.device_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Partial GroupAggregate (actual rows=1 loops=1) Group Key: _hyper_2_12_chunk.device_id -> Index Only Scan Backward using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=336 loops=1) -(36 rows) +(51 rows) SET enable_hashagg = ON; -- test CTE diff --git a/tsl/test/expected/transparent_decompression_queries.out b/tsl/test/expected/transparent_decompression_queries.out index 76cf6ff626b..973ca9ac29f 100644 --- a/tsl/test/expected/transparent_decompression_queries.out +++ b/tsl/test/expected/transparent_decompression_queries.out @@ -83,8 +83,8 @@ EXPLAIN (analyze,costs off,timing off,summary off) SELECT FROM merge_sort WHERE time < now() GROUP BY 2, 3; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------- GroupAggregate (actual rows=1 loops=1) Group Key: merge_sort.device_id, merge_sort.measure_id -> Custom Scan (ConstraintAwareAppend) (actual rows=745 loops=1) @@ -94,7 +94,10 @@ GROUP BY 2, 3; Sort Key: _hyper_3_5_chunk.device_id, _hyper_3_5_chunk.measure_id -> Custom Scan (DecompressChunk) on _hyper_3_5_chunk (actual rows=120 loops=1) Vectorized Filter: ("time" < "timestamp"(now())) - -> Index Scan using compress_hyper_4_10_chunk_device_id_measure_id__ts_meta_min_idx on compress_hyper_4_10_chunk (actual rows=1 loops=1) + -> Sort (actual rows=1 loops=1) + Sort Key: compress_hyper_4_10_chunk.device_id, compress_hyper_4_10_chunk.measure_id + Sort Method: quicksort + -> Seq Scan on compress_hyper_4_10_chunk (actual rows=1 loops=1) -> Sort (actual rows=168 loops=1) Sort Key: _hyper_3_6_chunk.device_id, _hyper_3_6_chunk.measure_id Sort Method: quicksort @@ -115,7 +118,7 @@ GROUP BY 2, 3; Sort Method: quicksort -> Seq Scan on _hyper_3_9_chunk (actual rows=121 loops=1) Filter: ("time" < now()) -(30 rows) +(33 rows) -- this should exclude the decompressed chunk EXPLAIN (analyze,costs off,timing off,summary off) SELECT diff --git a/tsl/test/expected/vector_agg_functions.out b/tsl/test/expected/vector_agg_functions.out index 651fda5ceba..360b82545eb 100644 --- a/tsl/test/expected/vector_agg_functions.out +++ b/tsl/test/expected/vector_agg_functions.out @@ -165,6 +165,9 @@ where and (explain is null /* or condition is null and grouping = 's' */) and (variable != '*' or function = 'count') and (variable not in ('t', 'cts', 'ctstz', 'cdate') or function in ('min', 'max')) + -- For minmax w/o grouping we can get the ORDER BY LIMIT 1 InitPlan instead + -- of vectorized aggregation, with no easy way to disable it. + and (grouping is not null or function not in ('min', 'max')) -- This is not vectorized yet and (variable != 'cint8' or function != 'stddev') and (function != 'count' or variable in ('cint2', 's', '*')) @@ -207,12 +210,6 @@ select ss, count(*) from aggfns group by ss order by count(*), ss limit 10; 11 | 40019 (10 rows) -select max(cdate) from aggfns; - max ------------- - 06-01-2267 -(1 row) - select s, max(cdate) from aggfns group by s order by max(cdate), s limit 10; s | max ---+------------ @@ -243,12 +240,6 @@ select ss, max(cdate) from aggfns group by ss order by max(cdate), ss limit 10; 9 | 06-01-2267 (10 rows) -select min(cdate) from aggfns; - min ------------- - 01-01-2021 -(1 row) - select s, min(cdate) from aggfns group by s order by min(cdate), s limit 10; s | min ---+------------ @@ -315,12 +306,6 @@ select ss, avg(cfloat4) from aggfns group by ss order by avg(cfloat4), ss limit 11 | NaN (10 rows) -select max(cfloat4) from aggfns; - max ------ - NaN -(1 row) - select s, max(cfloat4) from aggfns group by s order by max(cfloat4), s limit 10; s | max ---+---------- @@ -351,12 +336,6 @@ select ss, max(cfloat4) from aggfns group by ss order by max(cfloat4), ss limit 11 | NaN (10 rows) -select min(cfloat4) from aggfns; - min ------------ - -Infinity -(1 row) - select s, min(cfloat4) from aggfns group by s order by min(cfloat4), s limit 10; s | min ---+----------- @@ -495,12 +474,6 @@ select ss, avg(cfloat8) from aggfns group by ss order by avg(cfloat8), ss limit 11 | 6.59778165165114 (10 rows) -select max(cfloat8) from aggfns; - max ------------------- - 49.9995574122295 -(1 row) - select s, max(cfloat8) from aggfns group by s order by max(cfloat8), s limit 10; s | max ---+------------------ @@ -531,12 +504,6 @@ select ss, max(cfloat8) from aggfns group by ss order by max(cfloat8), ss limit 9 | 49.9995574122295 (10 rows) -select min(cfloat8) from aggfns; - min -------------------- - -49.9994775978848 -(1 row) - select s, min(cfloat8) from aggfns group by s order by min(cfloat8), s limit 10; s | min ---+------------------- @@ -711,12 +678,6 @@ select ss, count(cint2) from aggfns group by ss order by count(cint2), ss limit 11 | 39981 (10 rows) -select max(cint2) from aggfns; - max -------- - 16383 -(1 row) - select s, max(cint2) from aggfns group by s order by max(cint2), s limit 10; s | max ---+------- @@ -747,12 +708,6 @@ select ss, max(cint2) from aggfns group by ss order by max(cint2), ss limit 10; 11 | 16383 (10 rows) -select min(cint2) from aggfns; - min --------- - -16383 -(1 row) - select s, min(cint2) from aggfns group by s order by min(cint2), s limit 10; s | min ---+-------- @@ -891,12 +846,6 @@ select ss, avg(cint4) from aggfns group by ss order by avg(cint4), ss limit 10; | 2197.6842105263157895 (10 rows) -select max(cint4) from aggfns; - max -------- - 16383 -(1 row) - select s, max(cint4) from aggfns group by s order by max(cint4), s limit 10; s | max ---+------- @@ -927,12 +876,6 @@ select ss, max(cint4) from aggfns group by ss order by max(cint4), ss limit 10; 11 | 16383 (10 rows) -select min(cint4) from aggfns; - min --------- - -16383 -(1 row) - select s, min(cint4) from aggfns group by s order by min(cint4), s limit 10; s | min ---+-------- @@ -1071,12 +1014,6 @@ select ss, avg(cint8) from aggfns group by ss order by avg(cint8), ss limit 10; | 2467.2631578947368421 (10 rows) -select max(cint8) from aggfns; - max -------- - 16383 -(1 row) - select s, max(cint8) from aggfns group by s order by max(cint8), s limit 10; s | max ---+------- @@ -1107,12 +1044,6 @@ select ss, max(cint8) from aggfns group by ss order by max(cint8), ss limit 10; 11 | 16383 (10 rows) -select min(cint8) from aggfns; - min --------- - -16383 -(1 row) - select s, min(cint8) from aggfns group by s order by min(cint8), s limit 10; s | min ---+-------- @@ -1179,12 +1110,6 @@ select ss, sum(cint8) from aggfns group by ss order by sum(cint8), ss limit 10; 9 | 1234935 (10 rows) -select max(cts) from aggfns; - max --------------------------- - Sat Jan 02 02:01:01 2021 -(1 row) - select s, max(cts) from aggfns group by s order by max(cts), s limit 10; s | max ---+-------------------------- @@ -1215,12 +1140,6 @@ select ss, max(cts) from aggfns group by ss order by max(cts), ss limit 10; 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select min(cts) from aggfns; - min --------------------------- - Fri Jan 01 01:01:01 2021 -(1 row) - select s, min(cts) from aggfns group by s order by min(cts), s limit 10; s | min ---+-------------------------- @@ -1251,12 +1170,6 @@ select ss, min(cts) from aggfns group by ss order by min(cts), ss limit 10; 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select max(ctstz) from aggfns; - max ------------------------------- - Sat Jan 02 02:01:01 2021 PST -(1 row) - select s, max(ctstz) from aggfns group by s order by max(ctstz), s limit 10; s | max ---+------------------------------ @@ -1287,12 +1200,6 @@ select ss, max(ctstz) from aggfns group by ss order by max(ctstz), ss limit 10; 9 | Sat Jan 02 02:01:01 2021 PST (10 rows) -select min(ctstz) from aggfns; - min ------------------------------- - Fri Jan 01 01:01:01 2021 PST -(1 row) - select s, min(ctstz) from aggfns group by s order by min(ctstz), s limit 10; s | min ---+------------------------------ @@ -1395,12 +1302,6 @@ select ss, count(s) from aggfns group by ss order by count(s), ss limit 10; 11 | 40019 (10 rows) -select max(s) from aggfns; - max ------ - 9 -(1 row) - select s, max(s) from aggfns group by s order by max(s), s limit 10; s | max ---+----- @@ -1431,12 +1332,6 @@ select ss, max(s) from aggfns group by ss order by max(s), ss limit 10; 9 | 9 (10 rows) -select min(s) from aggfns; - min ------ - 0 -(1 row) - select s, min(s) from aggfns group by s order by min(s), s limit 10; s | min ---+----- @@ -1575,12 +1470,6 @@ select ss, avg(ss) from aggfns group by ss order by avg(ss), ss limit 10; | (10 rows) -select max(ss) from aggfns; - max ------ - 11 -(1 row) - select s, max(ss) from aggfns group by s order by max(ss), s limit 10; s | max ---+----- @@ -1611,12 +1500,6 @@ select ss, max(ss) from aggfns group by ss order by max(ss), ss limit 10; | (10 rows) -select min(ss) from aggfns; - min ------ - 0 -(1 row) - select s, min(ss) from aggfns group by s order by min(ss), s limit 10; s | min ---+----- @@ -1719,12 +1602,6 @@ select ss, sum(ss) from aggfns group by ss order by sum(ss), ss limit 10; | (10 rows) -select max(t) from aggfns; - max --------- - 110000 -(1 row) - select s, max(t) from aggfns group by s order by max(t), s limit 10; s | max ---+-------- @@ -1755,12 +1632,6 @@ select ss, max(t) from aggfns group by ss order by max(t), ss limit 10; 9 | 110000 (10 rows) -select min(t) from aggfns; - min ------ - 1 -(1 row) - select s, min(t) from aggfns group by s order by min(t), s limit 10; s | min ---+------- @@ -1827,12 +1698,6 @@ select ss, count(*) from aggfns where cfloat8 > 0 group by ss order by count(*), 11 | 30084 (10 rows) -select max(cdate) from aggfns where cfloat8 > 0; - max ------------- - 06-01-2267 -(1 row) - select s, max(cdate) from aggfns where cfloat8 > 0 group by s order by max(cdate), s limit 10; s | max ---+------------ @@ -1863,12 +1728,6 @@ select ss, max(cdate) from aggfns where cfloat8 > 0 group by ss order by max(cda 9 | 06-01-2267 (10 rows) -select min(cdate) from aggfns where cfloat8 > 0; - min ------------- - 01-01-2021 -(1 row) - select s, min(cdate) from aggfns where cfloat8 > 0 group by s order by min(cdate), s limit 10; s | min ---+------------ @@ -1935,12 +1794,6 @@ select ss, avg(cfloat4) from aggfns where cfloat8 > 0 group by ss order by avg(c 11 | NaN (10 rows) -select max(cfloat4) from aggfns where cfloat8 > 0; - max ------ - NaN -(1 row) - select s, max(cfloat4) from aggfns where cfloat8 > 0 group by s order by max(cfloat4), s limit 10; s | max ---+--------- @@ -1971,12 +1824,6 @@ select ss, max(cfloat4) from aggfns where cfloat8 > 0 group by ss order by max(c 11 | NaN (10 rows) -select min(cfloat4) from aggfns where cfloat8 > 0; - min ------------ - -Infinity -(1 row) - select s, min(cfloat4) from aggfns where cfloat8 > 0 group by s order by min(cfloat4), s limit 10; s | min ---+----------- @@ -2115,12 +1962,6 @@ select ss, avg(cfloat8) from aggfns where cfloat8 > 0 group by ss order by avg(c 0 | 25.0776526587937 (10 rows) -select max(cfloat8) from aggfns where cfloat8 > 0; - max ------------------- - 49.9995574122295 -(1 row) - select s, max(cfloat8) from aggfns where cfloat8 > 0 group by s order by max(cfloat8), s limit 10; s | max ---+------------------ @@ -2151,12 +1992,6 @@ select ss, max(cfloat8) from aggfns where cfloat8 > 0 group by ss order by max(c 9 | 49.9995574122295 (10 rows) -select min(cfloat8) from aggfns where cfloat8 > 0; - min ----------------------- - 0.000765081495046616 -(1 row) - select s, min(cfloat8) from aggfns where cfloat8 > 0 group by s order by min(cfloat8), s limit 10; s | min ---+---------------------- @@ -2331,12 +2166,6 @@ select ss, count(cint2) from aggfns where cfloat8 > 0 group by ss order by count 11 | 30053 (10 rows) -select max(cint2) from aggfns where cfloat8 > 0; - max -------- - 16383 -(1 row) - select s, max(cint2) from aggfns where cfloat8 > 0 group by s order by max(cint2), s limit 10; s | max ---+------- @@ -2367,12 +2196,6 @@ select ss, max(cint2) from aggfns where cfloat8 > 0 group by ss order by max(cin 11 | 16383 (10 rows) -select min(cint2) from aggfns where cfloat8 > 0; - min --------- - -16383 -(1 row) - select s, min(cint2) from aggfns where cfloat8 > 0 group by s order by min(cint2), s limit 10; s | min ---+-------- @@ -2511,12 +2334,6 @@ select ss, avg(cint4) from aggfns where cfloat8 > 0 group by ss order by avg(cin | 868.6923076923076923 (10 rows) -select max(cint4) from aggfns where cfloat8 > 0; - max -------- - 16383 -(1 row) - select s, max(cint4) from aggfns where cfloat8 > 0 group by s order by max(cint4), s limit 10; s | max ---+------- @@ -2547,12 +2364,6 @@ select ss, max(cint4) from aggfns where cfloat8 > 0 group by ss order by max(cin 11 | 16383 (10 rows) -select min(cint4) from aggfns where cfloat8 > 0; - min --------- - -16383 -(1 row) - select s, min(cint4) from aggfns where cfloat8 > 0 group by s order by min(cint4), s limit 10; s | min ---+-------- @@ -2691,12 +2502,6 @@ select ss, avg(cint8) from aggfns where cfloat8 > 0 group by ss order by avg(cin | 2876.8461538461538462 (10 rows) -select max(cint8) from aggfns where cfloat8 > 0; - max -------- - 16383 -(1 row) - select s, max(cint8) from aggfns where cfloat8 > 0 group by s order by max(cint8), s limit 10; s | max ---+------- @@ -2727,12 +2532,6 @@ select ss, max(cint8) from aggfns where cfloat8 > 0 group by ss order by max(cin 11 | 16383 (10 rows) -select min(cint8) from aggfns where cfloat8 > 0; - min --------- - -16383 -(1 row) - select s, min(cint8) from aggfns where cfloat8 > 0 group by s order by min(cint8), s limit 10; s | min ---+-------- @@ -2799,12 +2598,6 @@ select ss, sum(cint8) from aggfns where cfloat8 > 0 group by ss order by sum(cin 3 | 1055717 (10 rows) -select max(cts) from aggfns where cfloat8 > 0; - max --------------------------- - Sat Jan 02 02:01:01 2021 -(1 row) - select s, max(cts) from aggfns where cfloat8 > 0 group by s order by max(cts), s limit 10; s | max ---+-------------------------- @@ -2835,12 +2628,6 @@ select ss, max(cts) from aggfns where cfloat8 > 0 group by ss order by max(cts), 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select min(cts) from aggfns where cfloat8 > 0; - min --------------------------- - Fri Jan 01 01:01:01 2021 -(1 row) - select s, min(cts) from aggfns where cfloat8 > 0 group by s order by min(cts), s limit 10; s | min ---+-------------------------- @@ -2871,12 +2658,6 @@ select ss, min(cts) from aggfns where cfloat8 > 0 group by ss order by min(cts), 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select max(ctstz) from aggfns where cfloat8 > 0; - max ------------------------------- - Sat Jan 02 02:01:01 2021 PST -(1 row) - select s, max(ctstz) from aggfns where cfloat8 > 0 group by s order by max(ctstz), s limit 10; s | max ---+------------------------------ @@ -2907,12 +2688,6 @@ select ss, max(ctstz) from aggfns where cfloat8 > 0 group by ss order by max(cts 9 | Sat Jan 02 02:01:01 2021 PST (10 rows) -select min(ctstz) from aggfns where cfloat8 > 0; - min ------------------------------- - Fri Jan 01 01:01:01 2021 PST -(1 row) - select s, min(ctstz) from aggfns where cfloat8 > 0 group by s order by min(ctstz), s limit 10; s | min ---+------------------------------ @@ -3015,12 +2790,6 @@ select ss, count(s) from aggfns where cfloat8 > 0 group by ss order by count(s), 11 | 30084 (10 rows) -select max(s) from aggfns where cfloat8 > 0; - max ------ - 9 -(1 row) - select s, max(s) from aggfns where cfloat8 > 0 group by s order by max(s), s limit 10; s | max ---+----- @@ -3051,12 +2820,6 @@ select ss, max(s) from aggfns where cfloat8 > 0 group by ss order by max(s), ss 9 | 9 (10 rows) -select min(s) from aggfns where cfloat8 > 0; - min ------ - 0 -(1 row) - select s, min(s) from aggfns where cfloat8 > 0 group by s order by min(s), s limit 10; s | min ---+----- @@ -3195,12 +2958,6 @@ select ss, avg(ss) from aggfns where cfloat8 > 0 group by ss order by avg(ss), s | (10 rows) -select max(ss) from aggfns where cfloat8 > 0; - max ------ - 11 -(1 row) - select s, max(ss) from aggfns where cfloat8 > 0 group by s order by max(ss), s limit 10; s | max ---+----- @@ -3231,12 +2988,6 @@ select ss, max(ss) from aggfns where cfloat8 > 0 group by ss order by max(ss), s | (10 rows) -select min(ss) from aggfns where cfloat8 > 0; - min ------ - 0 -(1 row) - select s, min(ss) from aggfns where cfloat8 > 0 group by s order by min(ss), s limit 10; s | min ---+----- @@ -3339,12 +3090,6 @@ select ss, sum(ss) from aggfns where cfloat8 > 0 group by ss order by sum(ss), s | (10 rows) -select max(t) from aggfns where cfloat8 > 0; - max --------- - 110000 -(1 row) - select s, max(t) from aggfns where cfloat8 > 0 group by s order by max(t), s limit 10; s | max ---+-------- @@ -3375,12 +3120,6 @@ select ss, max(t) from aggfns where cfloat8 > 0 group by ss order by max(t), ss 9 | 110000 (10 rows) -select min(t) from aggfns where cfloat8 > 0; - min ------ - 1 -(1 row) - select s, min(t) from aggfns where cfloat8 > 0 group by s order by min(t), s limit 10; s | min ---+------- @@ -3446,12 +3185,6 @@ select ss, count(*) from aggfns where cfloat8 <= 0 group by ss order by count(*) 0 | 10119 (10 rows) -select max(cdate) from aggfns where cfloat8 <= 0; - max ------------- - 06-01-2267 -(1 row) - select s, max(cdate) from aggfns where cfloat8 <= 0 group by s order by max(cdate), s limit 10; s | max ---+------------ @@ -3481,12 +3214,6 @@ select ss, max(cdate) from aggfns where cfloat8 <= 0 group by ss order by max(cd 9 | 06-01-2267 (10 rows) -select min(cdate) from aggfns where cfloat8 <= 0; - min ------------- - 01-01-2021 -(1 row) - select s, min(cdate) from aggfns where cfloat8 <= 0 group by s order by min(cdate), s limit 10; s | min ---+------------ @@ -3551,12 +3278,6 @@ select ss, avg(cfloat4) from aggfns where cfloat8 <= 0 group by ss order by avg( 11 | Infinity (10 rows) -select max(cfloat4) from aggfns where cfloat8 <= 0; - max ----------- - Infinity -(1 row) - select s, max(cfloat4) from aggfns where cfloat8 <= 0 group by s order by max(cfloat4), s limit 10; s | max ---+---------- @@ -3586,12 +3307,6 @@ select ss, max(cfloat4) from aggfns where cfloat8 <= 0 group by ss order by max( 11 | Infinity (10 rows) -select min(cfloat4) from aggfns where cfloat8 <= 0; - min ----------- - -49.9999 -(1 row) - select s, min(cfloat4) from aggfns where cfloat8 <= 0 group by s order by min(cfloat4), s limit 10; s | min ---+---------- @@ -3726,12 +3441,6 @@ select ss, avg(cfloat8) from aggfns where cfloat8 <= 0 group by ss order by avg( | -18.9533624914475 (10 rows) -select max(cfloat8) from aggfns where cfloat8 <= 0; - max ----------------------- - -0.00172397121787071 -(1 row) - select s, max(cfloat8) from aggfns where cfloat8 <= 0 group by s order by max(cfloat8), s limit 10; s | max ---+---------------------- @@ -3761,12 +3470,6 @@ select ss, max(cfloat8) from aggfns where cfloat8 <= 0 group by ss order by max( 11 | -0.00172397121787071 (10 rows) -select min(cfloat8) from aggfns where cfloat8 <= 0; - min -------------------- - -49.9994775978848 -(1 row) - select s, min(cfloat8) from aggfns where cfloat8 <= 0 group by s order by min(cfloat8), s limit 10; s | min ---+------------------- @@ -3936,12 +3639,6 @@ select ss, count(cint2) from aggfns where cfloat8 <= 0 group by ss order by coun 0 | 10105 (10 rows) -select max(cint2) from aggfns where cfloat8 <= 0; - max -------- - 16383 -(1 row) - select s, max(cint2) from aggfns where cfloat8 <= 0 group by s order by max(cint2), s limit 10; s | max ---+------- @@ -3971,12 +3668,6 @@ select ss, max(cint2) from aggfns where cfloat8 <= 0 group by ss order by max(ci 6 | 16383 (10 rows) -select min(cint2) from aggfns where cfloat8 <= 0; - min --------- - -16383 -(1 row) - select s, min(cint2) from aggfns where cfloat8 <= 0 group by s order by min(cint2), s limit 10; s | min ---+-------- @@ -4111,12 +3802,6 @@ select ss, avg(cint4) from aggfns where cfloat8 <= 0 group by ss order by avg(ci | 5077.1666666666666667 (10 rows) -select max(cint4) from aggfns where cfloat8 <= 0; - max -------- - 16383 -(1 row) - select s, max(cint4) from aggfns where cfloat8 <= 0 group by s order by max(cint4), s limit 10; s | max ---+------- @@ -4146,12 +3831,6 @@ select ss, max(cint4) from aggfns where cfloat8 <= 0 group by ss order by max(ci 9 | 16383 (10 rows) -select min(cint4) from aggfns where cfloat8 <= 0; - min --------- - -16383 -(1 row) - select s, min(cint4) from aggfns where cfloat8 <= 0 group by s order by min(cint4), s limit 10; s | min ---+-------- @@ -4286,12 +3965,6 @@ select ss, avg(cint8) from aggfns where cfloat8 <= 0 group by ss order by avg(ci | 1579.8333333333333333 (10 rows) -select max(cint8) from aggfns where cfloat8 <= 0; - max -------- - 16383 -(1 row) - select s, max(cint8) from aggfns where cfloat8 <= 0 group by s order by max(cint8), s limit 10; s | max ---+------- @@ -4321,12 +3994,6 @@ select ss, max(cint8) from aggfns where cfloat8 <= 0 group by ss order by max(ci 4 | 16383 (10 rows) -select min(cint8) from aggfns where cfloat8 <= 0; - min --------- - -16383 -(1 row) - select s, min(cint8) from aggfns where cfloat8 <= 0 group by s order by min(cint8), s limit 10; s | min ---+-------- @@ -4391,12 +4058,6 @@ select ss, sum(cint8) from aggfns where cfloat8 <= 0 group by ss order by sum(ci 9 | 791704 (10 rows) -select max(cts) from aggfns where cfloat8 <= 0; - max --------------------------- - Sat Jan 02 02:01:01 2021 -(1 row) - select s, max(cts) from aggfns where cfloat8 <= 0 group by s order by max(cts), s limit 10; s | max ---+-------------------------- @@ -4426,12 +4087,6 @@ select ss, max(cts) from aggfns where cfloat8 <= 0 group by ss order by max(cts) 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select min(cts) from aggfns where cfloat8 <= 0; - min --------------------------- - Fri Jan 01 01:01:01 2021 -(1 row) - select s, min(cts) from aggfns where cfloat8 <= 0 group by s order by min(cts), s limit 10; s | min ---+-------------------------- @@ -4461,12 +4116,6 @@ select ss, min(cts) from aggfns where cfloat8 <= 0 group by ss order by min(cts) 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select max(ctstz) from aggfns where cfloat8 <= 0; - max ------------------------------- - Sat Jan 02 02:01:01 2021 PST -(1 row) - select s, max(ctstz) from aggfns where cfloat8 <= 0 group by s order by max(ctstz), s limit 10; s | max ---+------------------------------ @@ -4496,12 +4145,6 @@ select ss, max(ctstz) from aggfns where cfloat8 <= 0 group by ss order by max(ct 9 | Sat Jan 02 02:01:01 2021 PST (10 rows) -select min(ctstz) from aggfns where cfloat8 <= 0; - min ------------------------------- - Fri Jan 01 01:01:01 2021 PST -(1 row) - select s, min(ctstz) from aggfns where cfloat8 <= 0 group by s order by min(ctstz), s limit 10; s | min ---+------------------------------ @@ -4601,12 +4244,6 @@ select ss, count(s) from aggfns where cfloat8 <= 0 group by ss order by count(s) 0 | 10119 (10 rows) -select max(s) from aggfns where cfloat8 <= 0; - max ------ - 9 -(1 row) - select s, max(s) from aggfns where cfloat8 <= 0 group by s order by max(s), s limit 10; s | max ---+----- @@ -4636,12 +4273,6 @@ select ss, max(s) from aggfns where cfloat8 <= 0 group by ss order by max(s), ss 9 | 9 (10 rows) -select min(s) from aggfns where cfloat8 <= 0; - min ------ - 0 -(1 row) - select s, min(s) from aggfns where cfloat8 <= 0 group by s order by min(s), s limit 10; s | min ---+----- @@ -4776,12 +4407,6 @@ select ss, avg(ss) from aggfns where cfloat8 <= 0 group by ss order by avg(ss), | (10 rows) -select max(ss) from aggfns where cfloat8 <= 0; - max ------ - 11 -(1 row) - select s, max(ss) from aggfns where cfloat8 <= 0 group by s order by max(ss), s limit 10; s | max ---+----- @@ -4811,12 +4436,6 @@ select ss, max(ss) from aggfns where cfloat8 <= 0 group by ss order by max(ss), | (10 rows) -select min(ss) from aggfns where cfloat8 <= 0; - min ------ - 0 -(1 row) - select s, min(ss) from aggfns where cfloat8 <= 0 group by s order by min(ss), s limit 10; s | min ---+----- @@ -4916,12 +4535,6 @@ select ss, sum(ss) from aggfns where cfloat8 <= 0 group by ss order by sum(ss), | (10 rows) -select max(t) from aggfns where cfloat8 <= 0; - max --------- - 109998 -(1 row) - select s, max(t) from aggfns where cfloat8 <= 0 group by s order by max(t), s limit 10; s | max ---+-------- @@ -4951,12 +4564,6 @@ select ss, max(t) from aggfns where cfloat8 <= 0 group by ss order by max(t), ss 9 | 109998 (10 rows) -select min(t) from aggfns where cfloat8 <= 0; - min ------ - 8 -(1 row) - select s, min(t) from aggfns where cfloat8 <= 0 group by s order by min(t), s limit 10; s | min ---+------- @@ -5022,12 +4629,6 @@ select ss, count(*) from aggfns where cfloat8 < 1000 group by ss order by count( 11 | 40019 (10 rows) -select max(cdate) from aggfns where cfloat8 < 1000; - max ------------- - 06-01-2267 -(1 row) - select s, max(cdate) from aggfns where cfloat8 < 1000 group by s order by max(cdate), s limit 10; s | max ---+------------ @@ -5058,12 +4659,6 @@ select ss, max(cdate) from aggfns where cfloat8 < 1000 group by ss order by max( 9 | 06-01-2267 (10 rows) -select min(cdate) from aggfns where cfloat8 < 1000; - min ------------- - 01-01-2021 -(1 row) - select s, min(cdate) from aggfns where cfloat8 < 1000 group by s order by min(cdate), s limit 10; s | min ---+------------ @@ -5130,12 +4725,6 @@ select ss, avg(cfloat4) from aggfns where cfloat8 < 1000 group by ss order by av 11 | NaN (10 rows) -select max(cfloat4) from aggfns where cfloat8 < 1000; - max ------ - NaN -(1 row) - select s, max(cfloat4) from aggfns where cfloat8 < 1000 group by s order by max(cfloat4), s limit 10; s | max ---+---------- @@ -5166,12 +4755,6 @@ select ss, max(cfloat4) from aggfns where cfloat8 < 1000 group by ss order by ma 11 | NaN (10 rows) -select min(cfloat4) from aggfns where cfloat8 < 1000; - min ------------ - -Infinity -(1 row) - select s, min(cfloat4) from aggfns where cfloat8 < 1000 group by s order by min(cfloat4), s limit 10; s | min ---+----------- @@ -5310,12 +4893,6 @@ select ss, avg(cfloat8) from aggfns where cfloat8 < 1000 group by ss order by av 11 | 6.59778165165114 (10 rows) -select max(cfloat8) from aggfns where cfloat8 < 1000; - max ------------------- - 49.9995574122295 -(1 row) - select s, max(cfloat8) from aggfns where cfloat8 < 1000 group by s order by max(cfloat8), s limit 10; s | max ---+------------------ @@ -5346,12 +4923,6 @@ select ss, max(cfloat8) from aggfns where cfloat8 < 1000 group by ss order by ma 9 | 49.9995574122295 (10 rows) -select min(cfloat8) from aggfns where cfloat8 < 1000; - min -------------------- - -49.9994775978848 -(1 row) - select s, min(cfloat8) from aggfns where cfloat8 < 1000 group by s order by min(cfloat8), s limit 10; s | min ---+------------------- @@ -5526,12 +5097,6 @@ select ss, count(cint2) from aggfns where cfloat8 < 1000 group by ss order by co 11 | 39981 (10 rows) -select max(cint2) from aggfns where cfloat8 < 1000; - max -------- - 16383 -(1 row) - select s, max(cint2) from aggfns where cfloat8 < 1000 group by s order by max(cint2), s limit 10; s | max ---+------- @@ -5562,12 +5127,6 @@ select ss, max(cint2) from aggfns where cfloat8 < 1000 group by ss order by max( 11 | 16383 (10 rows) -select min(cint2) from aggfns where cfloat8 < 1000; - min --------- - -16383 -(1 row) - select s, min(cint2) from aggfns where cfloat8 < 1000 group by s order by min(cint2), s limit 10; s | min ---+-------- @@ -5706,12 +5265,6 @@ select ss, avg(cint4) from aggfns where cfloat8 < 1000 group by ss order by avg( | 2197.6842105263157895 (10 rows) -select max(cint4) from aggfns where cfloat8 < 1000; - max -------- - 16383 -(1 row) - select s, max(cint4) from aggfns where cfloat8 < 1000 group by s order by max(cint4), s limit 10; s | max ---+------- @@ -5742,12 +5295,6 @@ select ss, max(cint4) from aggfns where cfloat8 < 1000 group by ss order by max( 11 | 16383 (10 rows) -select min(cint4) from aggfns where cfloat8 < 1000; - min --------- - -16383 -(1 row) - select s, min(cint4) from aggfns where cfloat8 < 1000 group by s order by min(cint4), s limit 10; s | min ---+-------- @@ -5886,12 +5433,6 @@ select ss, avg(cint8) from aggfns where cfloat8 < 1000 group by ss order by avg( | 2467.2631578947368421 (10 rows) -select max(cint8) from aggfns where cfloat8 < 1000; - max -------- - 16383 -(1 row) - select s, max(cint8) from aggfns where cfloat8 < 1000 group by s order by max(cint8), s limit 10; s | max ---+------- @@ -5922,12 +5463,6 @@ select ss, max(cint8) from aggfns where cfloat8 < 1000 group by ss order by max( 11 | 16383 (10 rows) -select min(cint8) from aggfns where cfloat8 < 1000; - min --------- - -16383 -(1 row) - select s, min(cint8) from aggfns where cfloat8 < 1000 group by s order by min(cint8), s limit 10; s | min ---+-------- @@ -5994,12 +5529,6 @@ select ss, sum(cint8) from aggfns where cfloat8 < 1000 group by ss order by sum( 9 | 1234935 (10 rows) -select max(cts) from aggfns where cfloat8 < 1000; - max --------------------------- - Sat Jan 02 02:01:01 2021 -(1 row) - select s, max(cts) from aggfns where cfloat8 < 1000 group by s order by max(cts), s limit 10; s | max ---+-------------------------- @@ -6030,12 +5559,6 @@ select ss, max(cts) from aggfns where cfloat8 < 1000 group by ss order by max(ct 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select min(cts) from aggfns where cfloat8 < 1000; - min --------------------------- - Fri Jan 01 01:01:01 2021 -(1 row) - select s, min(cts) from aggfns where cfloat8 < 1000 group by s order by min(cts), s limit 10; s | min ---+-------------------------- @@ -6066,12 +5589,6 @@ select ss, min(cts) from aggfns where cfloat8 < 1000 group by ss order by min(ct 9 | Sat Jan 02 02:01:01 2021 (10 rows) -select max(ctstz) from aggfns where cfloat8 < 1000; - max ------------------------------- - Sat Jan 02 02:01:01 2021 PST -(1 row) - select s, max(ctstz) from aggfns where cfloat8 < 1000 group by s order by max(ctstz), s limit 10; s | max ---+------------------------------ @@ -6102,12 +5619,6 @@ select ss, max(ctstz) from aggfns where cfloat8 < 1000 group by ss order by max( 9 | Sat Jan 02 02:01:01 2021 PST (10 rows) -select min(ctstz) from aggfns where cfloat8 < 1000; - min ------------------------------- - Fri Jan 01 01:01:01 2021 PST -(1 row) - select s, min(ctstz) from aggfns where cfloat8 < 1000 group by s order by min(ctstz), s limit 10; s | min ---+------------------------------ @@ -6210,12 +5721,6 @@ select ss, count(s) from aggfns where cfloat8 < 1000 group by ss order by count( 11 | 40019 (10 rows) -select max(s) from aggfns where cfloat8 < 1000; - max ------ - 9 -(1 row) - select s, max(s) from aggfns where cfloat8 < 1000 group by s order by max(s), s limit 10; s | max ---+----- @@ -6246,12 +5751,6 @@ select ss, max(s) from aggfns where cfloat8 < 1000 group by ss order by max(s), 9 | 9 (10 rows) -select min(s) from aggfns where cfloat8 < 1000; - min ------ - 0 -(1 row) - select s, min(s) from aggfns where cfloat8 < 1000 group by s order by min(s), s limit 10; s | min ---+----- @@ -6390,12 +5889,6 @@ select ss, avg(ss) from aggfns where cfloat8 < 1000 group by ss order by avg(ss) | (10 rows) -select max(ss) from aggfns where cfloat8 < 1000; - max ------ - 11 -(1 row) - select s, max(ss) from aggfns where cfloat8 < 1000 group by s order by max(ss), s limit 10; s | max ---+----- @@ -6426,12 +5919,6 @@ select ss, max(ss) from aggfns where cfloat8 < 1000 group by ss order by max(ss) | (10 rows) -select min(ss) from aggfns where cfloat8 < 1000; - min ------ - 0 -(1 row) - select s, min(ss) from aggfns where cfloat8 < 1000 group by s order by min(ss), s limit 10; s | min ---+----- @@ -6534,12 +6021,6 @@ select ss, sum(ss) from aggfns where cfloat8 < 1000 group by ss order by sum(ss) | (10 rows) -select max(t) from aggfns where cfloat8 < 1000; - max --------- - 110000 -(1 row) - select s, max(t) from aggfns where cfloat8 < 1000 group by s order by max(t), s limit 10; s | max ---+-------- @@ -6570,12 +6051,6 @@ select ss, max(t) from aggfns where cfloat8 < 1000 group by ss order by max(t), 9 | 110000 (10 rows) -select min(t) from aggfns where cfloat8 < 1000; - min ------ - 1 -(1 row) - select s, min(t) from aggfns where cfloat8 < 1000 group by s order by min(t), s limit 10; s | min ---+------- @@ -6622,12 +6097,6 @@ select ss, count(*) from aggfns where cfloat8 > 1000 group by ss order by count( ----+------- (0 rows) -select max(cdate) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cdate) from aggfns where cfloat8 > 1000 group by s order by max(cdate), s limit 10; s | max ---+----- @@ -6638,12 +6107,6 @@ select ss, max(cdate) from aggfns where cfloat8 > 1000 group by ss order by max( ----+----- (0 rows) -select min(cdate) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cdate) from aggfns where cfloat8 > 1000 group by s order by min(cdate), s limit 10; s | min ---+----- @@ -6670,12 +6133,6 @@ select ss, avg(cfloat4) from aggfns where cfloat8 > 1000 group by ss order by av ----+----- (0 rows) -select max(cfloat4) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cfloat4) from aggfns where cfloat8 > 1000 group by s order by max(cfloat4), s limit 10; s | max ---+----- @@ -6686,12 +6143,6 @@ select ss, max(cfloat4) from aggfns where cfloat8 > 1000 group by ss order by ma ----+----- (0 rows) -select min(cfloat4) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cfloat4) from aggfns where cfloat8 > 1000 group by s order by min(cfloat4), s limit 10; s | min ---+----- @@ -6750,12 +6201,6 @@ select ss, avg(cfloat8) from aggfns where cfloat8 > 1000 group by ss order by av ----+----- (0 rows) -select max(cfloat8) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cfloat8) from aggfns where cfloat8 > 1000 group by s order by max(cfloat8), s limit 10; s | max ---+----- @@ -6766,12 +6211,6 @@ select ss, max(cfloat8) from aggfns where cfloat8 > 1000 group by ss order by ma ----+----- (0 rows) -select min(cfloat8) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cfloat8) from aggfns where cfloat8 > 1000 group by s order by min(cfloat8), s limit 10; s | min ---+----- @@ -6846,12 +6285,6 @@ select ss, count(cint2) from aggfns where cfloat8 > 1000 group by ss order by co ----+------- (0 rows) -select max(cint2) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cint2) from aggfns where cfloat8 > 1000 group by s order by max(cint2), s limit 10; s | max ---+----- @@ -6862,12 +6295,6 @@ select ss, max(cint2) from aggfns where cfloat8 > 1000 group by ss order by max( ----+----- (0 rows) -select min(cint2) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cint2) from aggfns where cfloat8 > 1000 group by s order by min(cint2), s limit 10; s | min ---+----- @@ -6926,12 +6353,6 @@ select ss, avg(cint4) from aggfns where cfloat8 > 1000 group by ss order by avg( ----+----- (0 rows) -select max(cint4) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cint4) from aggfns where cfloat8 > 1000 group by s order by max(cint4), s limit 10; s | max ---+----- @@ -6942,12 +6363,6 @@ select ss, max(cint4) from aggfns where cfloat8 > 1000 group by ss order by max( ----+----- (0 rows) -select min(cint4) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cint4) from aggfns where cfloat8 > 1000 group by s order by min(cint4), s limit 10; s | min ---+----- @@ -7006,12 +6421,6 @@ select ss, avg(cint8) from aggfns where cfloat8 > 1000 group by ss order by avg( ----+----- (0 rows) -select max(cint8) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cint8) from aggfns where cfloat8 > 1000 group by s order by max(cint8), s limit 10; s | max ---+----- @@ -7022,12 +6431,6 @@ select ss, max(cint8) from aggfns where cfloat8 > 1000 group by ss order by max( ----+----- (0 rows) -select min(cint8) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cint8) from aggfns where cfloat8 > 1000 group by s order by min(cint8), s limit 10; s | min ---+----- @@ -7054,12 +6457,6 @@ select ss, sum(cint8) from aggfns where cfloat8 > 1000 group by ss order by sum( ----+----- (0 rows) -select max(cts) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(cts) from aggfns where cfloat8 > 1000 group by s order by max(cts), s limit 10; s | max ---+----- @@ -7070,12 +6467,6 @@ select ss, max(cts) from aggfns where cfloat8 > 1000 group by ss order by max(ct ----+----- (0 rows) -select min(cts) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(cts) from aggfns where cfloat8 > 1000 group by s order by min(cts), s limit 10; s | min ---+----- @@ -7086,12 +6477,6 @@ select ss, min(cts) from aggfns where cfloat8 > 1000 group by ss order by min(ct ----+----- (0 rows) -select max(ctstz) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(ctstz) from aggfns where cfloat8 > 1000 group by s order by max(ctstz), s limit 10; s | max ---+----- @@ -7102,12 +6487,6 @@ select ss, max(ctstz) from aggfns where cfloat8 > 1000 group by ss order by max( ----+----- (0 rows) -select min(ctstz) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(ctstz) from aggfns where cfloat8 > 1000 group by s order by min(ctstz), s limit 10; s | min ---+----- @@ -7150,12 +6529,6 @@ select ss, count(s) from aggfns where cfloat8 > 1000 group by ss order by count( ----+------- (0 rows) -select max(s) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(s) from aggfns where cfloat8 > 1000 group by s order by max(s), s limit 10; s | max ---+----- @@ -7166,12 +6539,6 @@ select ss, max(s) from aggfns where cfloat8 > 1000 group by ss order by max(s), ----+----- (0 rows) -select min(s) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(s) from aggfns where cfloat8 > 1000 group by s order by min(s), s limit 10; s | min ---+----- @@ -7230,12 +6597,6 @@ select ss, avg(ss) from aggfns where cfloat8 > 1000 group by ss order by avg(ss) ----+----- (0 rows) -select max(ss) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(ss) from aggfns where cfloat8 > 1000 group by s order by max(ss), s limit 10; s | max ---+----- @@ -7246,12 +6607,6 @@ select ss, max(ss) from aggfns where cfloat8 > 1000 group by ss order by max(ss) ----+----- (0 rows) -select min(ss) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(ss) from aggfns where cfloat8 > 1000 group by s order by min(ss), s limit 10; s | min ---+----- @@ -7294,12 +6649,6 @@ select ss, sum(ss) from aggfns where cfloat8 > 1000 group by ss order by sum(ss) ----+----- (0 rows) -select max(t) from aggfns where cfloat8 > 1000; - max ------ - -(1 row) - select s, max(t) from aggfns where cfloat8 > 1000 group by s order by max(t), s limit 10; s | max ---+----- @@ -7310,12 +6659,6 @@ select ss, max(t) from aggfns where cfloat8 > 1000 group by ss order by max(t), ----+----- (0 rows) -select min(t) from aggfns where cfloat8 > 1000; - min ------ - -(1 row) - select s, min(t) from aggfns where cfloat8 > 1000 group by s order by min(t), s limit 10; s | min ---+----- @@ -7396,12 +6739,6 @@ select ss, count(cint2) from aggfns where cint2 is null group by ss order by cou 11 | 0 (9 rows) -select max(cint2) from aggfns where cint2 is null; - max ------ - -(1 row) - select s, max(cint2) from aggfns where cint2 is null group by s order by max(cint2), s limit 10; s | max ---+----- @@ -7431,12 +6768,6 @@ select ss, max(cint2) from aggfns where cint2 is null group by ss order by max(c 11 | (9 rows) -select min(cint2) from aggfns where cint2 is null; - min ------ - -(1 row) - select s, min(cint2) from aggfns where cint2 is null group by s order by min(cint2), s limit 10; s | min ---+----- diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-14.out b/tsl/test/shared/expected/transparent_decompress_chunk-14.out index 0883abf5659..804a0287818 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-14.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-14.out @@ -446,29 +446,49 @@ QUERY PLAN -- 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) -(3 rows) + Finalize Aggregate (actual rows=1 loops=1) + -> Gather (actual rows=1 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Custom Scan (VectorAgg) (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(7 rows) -- test aggregate with GROUP BY :PREFIX SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN - GroupAggregate (actual rows=5 loops=1) + Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(4 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(12 rows) -- test window functions with GROUP BY :PREFIX SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN WindowAgg (actual rows=5 loops=1) - -> GroupAggregate (actual rows=5 loops=1) + -> Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(5 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(13 rows) -- test CTE :PREFIX WITH q AS ( diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-15.out b/tsl/test/shared/expected/transparent_decompress_chunk-15.out index bd32d6cb8da..532143f25fa 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-15.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-15.out @@ -448,29 +448,49 @@ QUERY PLAN -- 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) -(3 rows) + Finalize Aggregate (actual rows=1 loops=1) + -> Gather (actual rows=1 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Custom Scan (VectorAgg) (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(7 rows) -- test aggregate with GROUP BY :PREFIX SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN - GroupAggregate (actual rows=5 loops=1) + Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(4 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(12 rows) -- test window functions with GROUP BY :PREFIX SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN WindowAgg (actual rows=5 loops=1) - -> GroupAggregate (actual rows=5 loops=1) + -> Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(5 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(13 rows) -- test CTE :PREFIX WITH q AS ( diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-16.out b/tsl/test/shared/expected/transparent_decompress_chunk-16.out index 24f28aeb4a0..939f2e2b089 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-16.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-16.out @@ -448,29 +448,49 @@ QUERY PLAN -- 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) -(3 rows) + Finalize Aggregate (actual rows=1 loops=1) + -> Gather (actual rows=1 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Custom Scan (VectorAgg) (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(7 rows) -- test aggregate with GROUP BY :PREFIX SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN - GroupAggregate (actual rows=5 loops=1) + Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(4 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(12 rows) -- test window functions with GROUP BY :PREFIX SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN WindowAgg (actual rows=5 loops=1) - -> GroupAggregate (actual rows=5 loops=1) + -> Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(5 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(13 rows) -- test CTE :PREFIX WITH q AS ( diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-17.out b/tsl/test/shared/expected/transparent_decompress_chunk-17.out index 24f28aeb4a0..939f2e2b089 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-17.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-17.out @@ -448,29 +448,49 @@ QUERY PLAN -- 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) -(3 rows) + Finalize Aggregate (actual rows=1 loops=1) + -> Gather (actual rows=1 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Custom Scan (VectorAgg) (actual rows=0 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(7 rows) -- test aggregate with GROUP BY :PREFIX SELECT count(*) FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN - GroupAggregate (actual rows=5 loops=1) + Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(4 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(12 rows) -- test window functions with GROUP BY :PREFIX SELECT sum(count(*)) OVER () FROM :TEST_TABLE GROUP BY device_id ORDER BY device_id; QUERY PLAN WindowAgg (actual rows=5 loops=1) - -> GroupAggregate (actual rows=5 loops=1) + -> Finalize GroupAggregate (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) - -> Index Scan using compress_hyper_X_X_chunk_device_id__ts_meta_min_1__ts_meta_idx on compress_hyper_X_X_chunk (actual rows=20 loops=1) -(5 rows) + -> Gather Merge (actual rows=20 loops=1) + Workers Planned: 2 + Workers Launched: 2 + -> Sort (actual rows=10 loops=2) + Sort Key: _hyper_X_X_chunk.device_id + Worker 0: Sort Method: quicksort + Worker 1: Sort Method: quicksort + -> Custom Scan (VectorAgg) (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk (actual rows=17990 loops=1) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) +(13 rows) -- test CTE :PREFIX WITH q AS ( diff --git a/tsl/test/sql/compress_auto_sparse_index.sql b/tsl/test/sql/compress_auto_sparse_index.sql index 6f3b6768bcd..3c2274e2cf6 100644 --- a/tsl/test/sql/compress_auto_sparse_index.sql +++ b/tsl/test/sql/compress_auto_sparse_index.sql @@ -11,43 +11,43 @@ alter table sparse set (timescaledb.compress); -- have btree indexes. create index ii on sparse(value); select count(compress_chunk(x)) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- Should be disabled with the GUC set timescaledb.auto_sparse_indexes to off; select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; reset timescaledb.auto_sparse_indexes; select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- Should survive renames. alter table sparse rename column value to wert; -explain select * from sparse where wert = 1; +explain (costs off) select * from sparse where wert = 1; alter table sparse rename column wert to value; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- Not for expression indexes. drop index ii; create index ii on sparse((value + 1)); select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- Not for other index types. drop index ii; create index ii on sparse using hash(value); select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- When the chunk is recompressed without index, no sparse index is created. drop index ii; select count(compress_chunk(decompress_chunk(x))) from show_chunks('sparse') x; -explain select * from sparse where value = 1; +explain (costs off) select * from sparse where value = 1; -- Long column names. @@ -62,5 +62,5 @@ from generate_series(1, 63) x select count(compress_chunk(x)) from show_chunks('sparse') x; -explain select * from sparse where Abcdef012345678_Bbcdef012345678_Cbcdef012345678_Dbcdef0 = 1; +explain (costs off) select * from sparse where Abcdef012345678_Bbcdef012345678_Cbcdef012345678_Dbcdef0 = 1; diff --git a/tsl/test/sql/compression.sql b/tsl/test/sql/compression.sql index adb7b81f07b..ef573da8a87 100644 --- a/tsl/test/sql/compression.sql +++ b/tsl/test/sql/compression.sql @@ -1146,7 +1146,7 @@ COPY compressed_table (time,a,b,c) FROM stdin; 2024-02-29 15:02:03.87313+01 20 3 3 \. -SELECT * FROM compressed_table; +SELECT * FROM compressed_table ORDER BY a; SELECT compress_chunk(i, if_not_compressed => true) FROM show_chunks('compressed_table') i; -- Check DML decompression limit diff --git a/tsl/test/sql/compression_qualpushdown.sql b/tsl/test/sql/compression_qualpushdown.sql index c2c9d8c04bc..db9b7d92da8 100644 --- a/tsl/test/sql/compression_qualpushdown.sql +++ b/tsl/test/sql/compression_qualpushdown.sql @@ -2,6 +2,8 @@ -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. +set max_parallel_workers_per_gather = 0; + -- qual pushdown tests for decompresschunk --- -- Test qual pushdown with ints CREATE TABLE meta (device_id INT PRIMARY KEY); @@ -119,6 +121,7 @@ EXPLAIN (costs off) SELECT * FROM pushdown_relabel WHERE dev_vc = 'varchar'; EXPLAIN (costs off) SELECT * FROM pushdown_relabel WHERE dev_c = 'char'; EXPLAIN (costs off) SELECT * FROM pushdown_relabel WHERE dev_vc = 'varchar' AND dev_c = 'char'; EXPLAIN (costs off) SELECT * FROM pushdown_relabel WHERE dev_vc = 'varchar'::char(10) AND dev_c = 'char'::varchar; +RESET enable_seqscan; -- github issue #5286 CREATE TABLE deleteme AS @@ -134,6 +137,7 @@ ALTER TABLE deleteme SET ( ); SELECT compress_chunk(i) FROM show_chunks('deleteme') i; +VACUUM ANALYZE deleteme; EXPLAIN (costs off) SELECT sum(data) FROM deleteme WHERE segment::text like '%4%'; EXPLAIN (costs off) SELECT sum(data) FROM deleteme WHERE '4' = segment::text; @@ -161,6 +165,7 @@ ALTER TABLE svf_pushdown SET (timescaledb.compress,timescaledb.compress_segmentb INSERT INTO svf_pushdown SELECT '2020-01-01'; SELECT compress_chunk(show_chunks('svf_pushdown')); +VACUUM ANALYZE svf_pushdown; -- constraints should be pushed down into scan below decompresschunk in all cases EXPLAIN (costs off) SELECT * FROM svf_pushdown WHERE c_date = CURRENT_DATE; @@ -196,3 +201,4 @@ LATERAL( EXISTS (SELECT FROM meta) LIMIT 1 ) l; +DROP TABLE svf_pushdown; diff --git a/tsl/test/sql/compression_sorted_merge.sql.in b/tsl/test/sql/compression_sorted_merge.sql.in index 9d6ccaf714d..21d8d84a748 100644 --- a/tsl/test/sql/compression_sorted_merge.sql.in +++ b/tsl/test/sql/compression_sorted_merge.sql.in @@ -268,11 +268,11 @@ SELECT x3,time FROM test1 ORDER BY time DESC; SELECT time,x3 FROM test1 ORDER BY time DESC; -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; SELECT 1 as one, 2 as two, 3 as three, time, x2 FROM test1 ORDER BY time DESC; -- Test with projection and constants -EXPLAIN (verbose) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; +EXPLAIN (verbose, costs off) SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; SELECT 1 as one, 2 as two, 3 as three, x2, time FROM test1 ORDER BY time DESC; -- With projection and selection on compressed column (value smaller as max value for some batches, so batches are opened and filter has to be applied) diff --git a/tsl/test/sql/compression_sorted_merge_distinct.sql b/tsl/test/sql/compression_sorted_merge_distinct.sql index 5e8ee200465..017af426388 100644 --- a/tsl/test/sql/compression_sorted_merge_distinct.sql +++ b/tsl/test/sql/compression_sorted_merge_distinct.sql @@ -5,6 +5,8 @@ -- Test that the compressed batch sorted merge plan is chosen based on the -- cardinality of the segmentby columns. +set max_parallel_workers_per_gather = 0; + -- helper function: float -> pseudorandom float [0..1]. create or replace function mix(x float4) returns float4 as $$ select ((hashfloat4(x) / (pow(2., 31) - 1) + 1) / 2)::float4 $$ language sql; @@ -52,3 +54,5 @@ select least(4194304, max_val::bigint) large_work_mem from pg_settings where nam set work_mem to :large_work_mem; explain (costs off) select * from t where high_card < 10 order by ts; reset work_mem; + +reset max_parallel_workers_per_gather; diff --git a/tsl/test/sql/vector_agg_functions.sql b/tsl/test/sql/vector_agg_functions.sql index b3c65158aa3..bd40f350ac1 100644 --- a/tsl/test/sql/vector_agg_functions.sql +++ b/tsl/test/sql/vector_agg_functions.sql @@ -96,6 +96,7 @@ limit 1 \gset set timescaledb.debug_require_vector_agg = :'guc_value'; + ---- Uncomment to generate reference. Note that there are minor discrepancies ---- on float4 due to different numeric stability in our and PG implementations. --set timescaledb.enable_chunkwise_aggregation to off; set timescaledb.enable_vectorized_aggregation to off; set timescaledb.debug_require_vector_agg = 'forbid'; @@ -151,6 +152,9 @@ where and (explain is null /* or condition is null and grouping = 's' */) and (variable != '*' or function = 'count') and (variable not in ('t', 'cts', 'ctstz', 'cdate') or function in ('min', 'max')) + -- For minmax w/o grouping we can get the ORDER BY LIMIT 1 InitPlan instead + -- of vectorized aggregation, with no easy way to disable it. + and (grouping is not null or function not in ('min', 'max')) -- This is not vectorized yet and (variable != 'cint8' or function != 'stddev') and (function != 'count' or variable in ('cint2', 's', '*'))