diff --git a/src/cross_module_fn.c b/src/cross_module_fn.c index eb62cf03bbe..8ad4ddef323 100644 --- a/src/cross_module_fn.c +++ b/src/cross_module_fn.c @@ -381,12 +381,6 @@ func_call_on_data_nodes_default(FunctionCallInfo finfo, List *data_node_oids) pg_unreachable(); } -static void -update_compressed_chunk_relstats_default(Oid uncompressed_relid, Oid compressed_relid) -{ - error_no_default_fn_community(); -} - static void dist_update_stale_chunk_metadata_default(Chunk *new_chunk, List *chunk_data_nodes) { @@ -553,7 +547,6 @@ TSDLLEXPORT CrossModuleFunctions ts_cm_functions_default = { .chunk_create_empty_table = error_no_default_fn_pg_community, .chunk_create_replica_table = error_no_default_fn_pg_community, .hypertable_distributed_set_replication_factor = error_no_default_fn_pg_community, - .update_compressed_chunk_relstats = update_compressed_chunk_relstats_default, .health_check = error_no_default_fn_pg_community, }; diff --git a/src/cross_module_fn.h b/src/cross_module_fn.h index 57aa0a3aff0..d10ea286b54 100644 --- a/src/cross_module_fn.h +++ b/src/cross_module_fn.h @@ -201,7 +201,6 @@ typedef struct CrossModuleFunctions PGFunction chunk_freeze_chunk; PGFunction chunk_unfreeze_chunk; PGFunction chunks_drop_stale; - void (*update_compressed_chunk_relstats)(Oid uncompressed_relid, Oid compressed_relid); PGFunction health_check; } CrossModuleFunctions; diff --git a/src/planner/planner.c b/src/planner/planner.c index 8bc19fefbab..9ec5bf6387c 100644 --- a/src/planner/planner.c +++ b/src/planner/planner.c @@ -1308,20 +1308,6 @@ timescaledb_get_relation_info_hook(PlannerInfo *root, Oid relation_objectid, boo * IndexPaths at all */ rel->indexlist = NIL; - - /* Relation size estimates are messed up on compressed chunks due to there - * being no actual pages for the table in the storage manager. - */ - rel->pages = (BlockNumber) uncompressed_chunk->rd_rel->relpages; - rel->tuples = (double) uncompressed_chunk->rd_rel->reltuples; - if (rel->pages == 0) - rel->allvisfrac = 0.0; - else if (uncompressed_chunk->rd_rel->relallvisible >= (int32) rel->pages) - rel->allvisfrac = 1.0; - else - rel->allvisfrac = - (double) uncompressed_chunk->rd_rel->relallvisible / rel->pages; - table_close(uncompressed_chunk, NoLock); } } diff --git a/src/process_utility.c b/src/process_utility.c index 04d81a79f70..0a6929efa30 100644 --- a/src/process_utility.c +++ b/src/process_utility.c @@ -768,30 +768,6 @@ typedef struct ChunkPair Oid compressed_relid; } ChunkPair; -static void -add_compressed_chunk_to_vacuum(Hypertable *ht, Oid comp_chunk_relid, void *arg) -{ - VacuumCtx *ctx = (VacuumCtx *) arg; - Chunk *compressed_chunk = ts_chunk_get_by_relid(comp_chunk_relid, true); - VacuumRelation *chunk_vacuum_rel; - - Chunk *chunk_parent; - /* chunk is from a compressed hypertable */ - Assert(TS_HYPERTABLE_IS_INTERNAL_COMPRESSION_TABLE(ht)); - - /*chunks for internal compression table have a parent */ - chunk_parent = ts_chunk_get_compressed_chunk_parent(compressed_chunk); - Assert(chunk_parent != NULL); - - ChunkPair *cp = palloc(sizeof(ChunkPair)); - cp->uncompressed_relid = chunk_parent->table_id; - cp->compressed_relid = comp_chunk_relid; - ctx->chunk_pairs = lappend(ctx->chunk_pairs, cp); - /* analyze/vacuum the compressed rel instead */ - chunk_vacuum_rel = makeVacuumRelation(NULL, comp_chunk_relid, NIL); - ctx->chunk_rels = lappend(ctx->chunk_rels, chunk_vacuum_rel); -} - /* Adds a chunk to the list of tables to be vacuumed */ static void add_chunk_to_vacuum(Hypertable *ht, Oid chunk_relid, void *arg) @@ -801,30 +777,11 @@ add_chunk_to_vacuum(Hypertable *ht, Oid chunk_relid, void *arg) VacuumRelation *chunk_vacuum_rel; RangeVar *chunk_range_var; - /* If the chunk has an associated compressed chunk, analyze that instead - * When we compress a chunk, we save stats for the raw chunk, do - * not modify that. Data now lives in the compressed chunk, so - * analyze it. - */ - if (chunk->fd.compressed_chunk_id != INVALID_CHUNK_ID) - { - Chunk *comp_chunk = ts_chunk_get_by_id(chunk->fd.compressed_chunk_id, true); - ChunkPair *cp = palloc(sizeof(ChunkPair)); - cp->uncompressed_relid = chunk_relid; - cp->compressed_relid = comp_chunk->table_id; - ctx->chunk_pairs = lappend(ctx->chunk_pairs, cp); - /* analyze/vacuum the compressed rel instead */ - chunk_vacuum_rel = makeVacuumRelation(NULL, comp_chunk->table_id, NIL); - ctx->chunk_rels = lappend(ctx->chunk_rels, chunk_vacuum_rel); - } - else - { - chunk_range_var = copyObject(ctx->ht_vacuum_rel->relation); - chunk_range_var->relname = NameStr(chunk->fd.table_name); - chunk_range_var->schemaname = NameStr(chunk->fd.schema_name); - chunk_vacuum_rel = - makeVacuumRelation(chunk_range_var, chunk_relid, ctx->ht_vacuum_rel->va_cols); - } + chunk_range_var = copyObject(ctx->ht_vacuum_rel->relation); + chunk_range_var->relname = NameStr(chunk->fd.table_name); + chunk_range_var->schemaname = NameStr(chunk->fd.schema_name); + chunk_vacuum_rel = + makeVacuumRelation(chunk_range_var, chunk_relid, ctx->ht_vacuum_rel->va_cols); ctx->chunk_rels = lappend(ctx->chunk_rels, chunk_vacuum_rel); } @@ -851,7 +808,6 @@ ts_get_all_vacuum_rels(bool is_vacuumcmd) { Form_pg_class classform = (Form_pg_class) GETSTRUCT(tuple); Hypertable *ht; - Chunk *chunk; Oid relid; relid = classform->oid; @@ -873,16 +829,8 @@ ts_get_all_vacuum_rels(bool is_vacuumcmd) ht = ts_hypertable_cache_get_entry(hcache, relid, CACHE_FLAG_MISSING_OK); if (ht) - { if (hypertable_is_distributed(ht)) continue; - } - else - { - chunk = ts_chunk_get_by_relid(relid, false); - if (chunk && chunk->fd.compressed_chunk_id != INVALID_CHUNK_ID) - continue; - } /* * Build VacuumRelation(s) specifying the table OIDs to be processed. @@ -950,17 +898,8 @@ process_vacuum(ProcessUtilityArgs *args) */ if (hypertable_is_distributed(ht)) continue; - - if (TS_HYPERTABLE_IS_INTERNAL_COMPRESSION_TABLE(ht)) - { - ctx.ht_vacuum_rel = vacuum_rel; - foreach_chunk(ht, add_compressed_chunk_to_vacuum, &ctx); - } - else - { - ctx.ht_vacuum_rel = vacuum_rel; - foreach_chunk(ht, add_chunk_to_vacuum, &ctx); - } + ctx.ht_vacuum_rel = vacuum_rel; + foreach_chunk(ht, add_chunk_to_vacuum, &ctx); } } vacuum_rels = lappend(vacuum_rels, vacuum_rel); @@ -978,12 +917,6 @@ process_vacuum(ProcessUtilityArgs *args) /* ACL permission checks inside vacuum_rel and analyze_rel called by this ExecVacuum */ ExecVacuum(args->parse_state, stmt, is_toplevel); - foreach (lc, ctx.chunk_pairs) - { - ChunkPair *cp = (ChunkPair *) lfirst(lc); - ts_cm_functions->update_compressed_chunk_relstats(cp->uncompressed_relid, - cp->compressed_relid); - } } /* Restore original list. stmt->rels which has references to diff --git a/tsl/src/compression/api.c b/tsl/src/compression/api.c index 82e660d795c..4e607a24f89 100644 --- a/tsl/src/compression/api.c +++ b/tsl/src/compression/api.c @@ -240,47 +240,6 @@ compresschunkcxt_init(CompressChunkCxt *cxt, Cache *hcache, Oid hypertable_relid cxt->srcht_chunk = srcchunk; } -static void -disable_autovacuum_on_chunk(Oid chunk_relid) -{ - AlterTableCmd at_cmd = { - .type = T_AlterTableCmd, - .subtype = AT_SetRelOptions, - .def = (Node *) list_make1( - makeDefElem("autovacuum_enabled", (Node *) makeString("false"), -1)), - }; - ts_alter_table_with_event_trigger(chunk_relid, NULL, list_make1(&at_cmd), false); -} - -/* This function is intended to undo the disabling of autovacuum done when we compressed a chunk. - * Note that we do not cache the previous value for this (as we don't expect users to toggle this - * for individual chunks), so we use the hypertable's setting to determine whether to enable this on - * the decompressed chunk. - */ -static void -restore_autovacuum_on_decompress(Oid uncompressed_hypertable_relid, Oid uncompressed_chunk_relid) -{ - Relation tablerel = table_open(uncompressed_hypertable_relid, AccessShareLock); - bool ht_autovac_enabled = - tablerel->rd_options ? ((StdRdOptions *) (tablerel)->rd_options)->autovacuum.enabled : true; - - table_close(tablerel, AccessShareLock); - if (ht_autovac_enabled) - { - AlterTableCmd at_cmd = { - .type = T_AlterTableCmd, - .subtype = AT_SetRelOptions, - .def = (Node *) list_make1( - makeDefElem("autovacuum_enabled", (Node *) makeString("true"), -1)), - }; - - ts_alter_table_with_event_trigger(uncompressed_chunk_relid, - NULL, - list_make1(&at_cmd), - false); - } -} - static Chunk * find_chunk_to_merge_into(Hypertable *ht, Chunk *current_chunk) { @@ -415,10 +374,7 @@ compress_chunk_impl(Oid hypertable_relid, Oid chunk_relid) /* acquire locks on src and compress hypertable and src chunk */ LockRelationOid(cxt.srcht->main_table_relid, AccessShareLock); LockRelationOid(cxt.compress_ht->main_table_relid, AccessShareLock); - LockRelationOid(cxt.srcht_chunk->table_id, ShareLock); - - /* Disabling autovacuum on chunk which should be empty while in compressed state */ - disable_autovacuum_on_chunk(chunk_relid); + LockRelationOid(cxt.srcht_chunk->table_id, ExclusiveLock); /* acquire locks on catalog tables to keep till end of txn */ LockRelationOid(catalog_get_table_id(ts_catalog_get(), HYPERTABLE_COMPRESSION), @@ -516,7 +472,6 @@ compress_chunk_impl(Oid hypertable_relid, Oid chunk_relid) colinfo_array, htcols_listlen); - merge_chunk_relstats(mergable_chunk->table_id, cxt.srcht_chunk->table_id); ts_chunk_merge_on_dimension(mergable_chunk, cxt.srcht_chunk, time_dim->fd.id); if (chunk_unordered) @@ -637,10 +592,6 @@ decompress_chunk_impl(Oid uncompressed_hypertable_relid, Oid uncompressed_chunk_ */ LockRelationOid(compressed_chunk->table_id, AccessExclusiveLock); ts_chunk_drop(compressed_chunk, DROP_RESTRICT, -1); - - /* reenable autovacuum if necessary */ - restore_autovacuum_on_decompress(uncompressed_hypertable_relid, uncompressed_chunk_relid); - ts_cache_release(hcache); return true; } diff --git a/tsl/src/compression/compression.c b/tsl/src/compression/compression.c index 18c3db273e2..2f34f55ae9d 100644 --- a/tsl/src/compression/compression.c +++ b/tsl/src/compression/compression.c @@ -190,70 +190,6 @@ get_compressed_data_header(Datum data) return header; } -static void -capture_pgclass_stats(Oid table_oid, int *out_pages, int *out_visible, float *out_tuples) -{ - Relation pg_class = table_open(RelationRelationId, RowExclusiveLock); - HeapTuple tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(table_oid)); - Form_pg_class classform; - - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "could not find tuple for relation %u", table_oid); - - classform = (Form_pg_class) GETSTRUCT(tuple); - - *out_pages = classform->relpages; - *out_visible = classform->relallvisible; - *out_tuples = classform->reltuples; - - heap_freetuple(tuple); - table_close(pg_class, RowExclusiveLock); -} - -static void -restore_pgclass_stats(Oid table_oid, int pages, int visible, float tuples) -{ - Relation pg_class; - HeapTuple tuple; - Form_pg_class classform; - - pg_class = table_open(RelationRelationId, RowExclusiveLock); - tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(table_oid)); - if (!HeapTupleIsValid(tuple)) - elog(ERROR, "could not find tuple for relation %u", table_oid); - classform = (Form_pg_class) GETSTRUCT(tuple); - - classform->relpages = pages; - classform->relallvisible = visible; - classform->reltuples = tuples; - - CatalogTupleUpdate(pg_class, &tuple->t_self, tuple); - - heap_freetuple(tuple); - table_close(pg_class, RowExclusiveLock); -} - -/* Merge the relstats when merging chunks while compressing them. - * We need to do this in order to update the relstats of the chunk - * that is merged into since the compressed one will be dropped by - * the merge. - */ -extern void -merge_chunk_relstats(Oid merged_relid, Oid compressed_relid) -{ - int comp_pages, merged_pages, comp_visible, merged_visible; - float comp_tuples, merged_tuples; - - capture_pgclass_stats(compressed_relid, &comp_pages, &comp_visible, &comp_tuples); - capture_pgclass_stats(merged_relid, &merged_pages, &merged_visible, &merged_tuples); - - merged_pages += comp_pages; - merged_visible += comp_visible; - merged_tuples += comp_tuples; - - restore_pgclass_stats(merged_relid, merged_pages, merged_visible, merged_tuples); -} - /* Truncate the relation WITHOUT applying triggers. This is the * main difference with ExecuteTruncate. Triggers aren't applied * because the data remains, just in compressed form. Also don't @@ -267,8 +203,6 @@ truncate_relation(Oid table_oid) * be a lock upgrade. */ Relation rel = table_open(table_oid, AccessExclusiveLock); Oid toast_relid; - int pages, visible; - float tuples; /* Chunks should never have fks into them, but double check */ if (fks != NIL) @@ -276,7 +210,6 @@ truncate_relation(Oid table_oid) CheckTableForSerializableConflictIn(rel); - capture_pgclass_stats(table_oid, &pages, &visible, &tuples); RelationSetNewRelfilenode(rel, rel->rd_rel->relpersistence); toast_relid = rel->rd_rel->reltoastrelid; @@ -299,7 +232,6 @@ truncate_relation(Oid table_oid) #endif reindex_relation(table_oid, REINDEX_REL_PROCESS_TOAST, options); rel = table_open(table_oid, AccessExclusiveLock); - restore_pgclass_stats(table_oid, pages, visible, tuples); CommandCounterIncrement(); table_close(rel, NoLock); } @@ -1996,45 +1928,3 @@ compression_get_toast_storage(CompressionAlgorithms algorithm) elog(ERROR, "invalid compression algorithm %d", algorithm); return definitions[algorithm].compressed_data_storage; } - -/* Get relstats from compressed chunk and insert into relstats for the - * corresponding chunk (that held the uncompressed data) from raw hypertable - */ -extern void -update_compressed_chunk_relstats(Oid uncompressed_relid, Oid compressed_relid) -{ - double rowcnt; - int comp_pages, uncomp_pages, comp_visible, uncomp_visible; - float comp_tuples, uncomp_tuples, out_tuples; - Chunk *uncompressed_chunk = ts_chunk_get_by_relid(uncompressed_relid, true); - Chunk *compressed_chunk = ts_chunk_get_by_relid(compressed_relid, true); - - if (uncompressed_chunk->table_id != uncompressed_relid || - uncompressed_chunk->fd.compressed_chunk_id != compressed_chunk->fd.id || - compressed_chunk->table_id != compressed_relid) - { - ereport(ERROR, - (errcode(ERRCODE_INTERNAL_ERROR), - errmsg("mismatched chunks for relstats update on compressed chunk \"%s\"", - get_rel_name(uncompressed_relid)))); - } - - capture_pgclass_stats(uncompressed_relid, &uncomp_pages, &uncomp_visible, &uncomp_tuples); - - /* Before compressing a chunk in 2.0, we save its stats. Prior - * releases do not support this. So the stats on uncompressed relid - * could be invalid. In this case, do the best that we can. - */ - if (uncomp_tuples == 0) - { - /* we need page info from compressed relid */ - capture_pgclass_stats(compressed_relid, &comp_pages, &comp_visible, &comp_tuples); - rowcnt = (double) ts_compression_chunk_size_row_count(uncompressed_chunk->fd.id); - if (rowcnt > 0) - out_tuples = (float4) rowcnt; - else - out_tuples = (float4) comp_tuples; - restore_pgclass_stats(uncompressed_relid, comp_pages, comp_visible, out_tuples); - CommandCounterIncrement(); - } -} diff --git a/tsl/src/compression/compression.h b/tsl/src/compression/compression.h index 4c8a8a2ea69..ea427ece964 100644 --- a/tsl/src/compression/compression.h +++ b/tsl/src/compression/compression.h @@ -150,7 +150,5 @@ extern void decompress_chunk(Oid in_table, Oid out_table); extern DecompressionIterator *(*tsl_get_decompression_iterator_init( CompressionAlgorithms algorithm, bool reverse))(Datum, Oid element_type); -extern void update_compressed_chunk_relstats(Oid uncompressed_relid, Oid compressed_relid); -extern void merge_chunk_relstats(Oid merged_relid, Oid compressed_relid); #endif diff --git a/tsl/src/init.c b/tsl/src/init.c index 2675a5970ba..788f6d621ca 100644 --- a/tsl/src/init.c +++ b/tsl/src/init.c @@ -233,7 +233,6 @@ CrossModuleFunctions tsl_cm_functions = { .chunk_create_replica_table = chunk_create_replica_table, .hypertable_distributed_set_replication_factor = hypertable_set_replication_factor, .cache_syscache_invalidate = cache_syscache_invalidate, - .update_compressed_chunk_relstats = update_compressed_chunk_relstats, .health_check = ts_dist_health_check, }; diff --git a/tsl/test/expected/chunk_merge.out b/tsl/test/expected/chunk_merge.out index 55b4ffa024a..b2f311181d3 100644 --- a/tsl/test/expected/chunk_merge.out +++ b/tsl/test/expected/chunk_merge.out @@ -106,7 +106,7 @@ FROM test1 GROUP BY i, bucket; NOTICE: refreshing continuous aggregate "test_cagg" -- Merging cagg chunks should also work. -SELECT _timescaledb_internal.test_merge_chunks_on_dimension('_timescaledb_internal._hyper_4_37_chunk','_timescaledb_internal._hyper_4_39_chunk', 4); +SELECT _timescaledb_internal.test_merge_chunks_on_dimension('_timescaledb_internal._hyper_4_37_chunk','_timescaledb_internal._hyper_4_40_chunk', 4); test_merge_chunks_on_dimension -------------------------------- diff --git a/tsl/test/expected/compression.out b/tsl/test/expected/compression.out index e2feb0d8ce8..7a2b889e939 100644 --- a/tsl/test/expected/compression.out +++ b/tsl/test/expected/compression.out @@ -1268,13 +1268,14 @@ SELECT compress_chunk(c) FROM show_chunks('stattest') c; SELECT approximate_row_count('stattest'); approximate_row_count ----------------------- - 26 + 0 (1 row) -SELECT relpages, reltuples FROM pg_class WHERE relname = :statchunk; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :statchunk; relpages | reltuples ----------+----------- - 1 | 26 + 0 | 0 (1 row) SELECT histogram_bounds FROM pg_stats WHERE tablename = :statchunk AND attname = 'c1'; @@ -1309,17 +1310,19 @@ SELECT histogram_bounds FROM pg_stats WHERE tablename = 'stattest' AND attname = ------------------ (0 rows) -SELECT relpages, reltuples FROM pg_class WHERE relname = :statchunk; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :statchunk; relpages | reltuples ----------+----------- - 1 | 26 + 0 | 0 (1 row) -- verify that corresponding compressed chunk's stats is updated as well. -SELECT relpages, reltuples FROM pg_class WHERE relname = :'STAT_COMP_CHUNK_NAME'; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :'STAT_COMP_CHUNK_NAME'; relpages | reltuples ----------+----------- - 1 | 1 + 0 | 0 (1 row) -- Verify that even a global analyze doesn't affect the chunk stats, changing message scope here @@ -1336,14 +1339,14 @@ SELECT histogram_bounds FROM pg_stats WHERE tablename = :statchunk AND attname = SELECT relpages, reltuples FROM pg_class WHERE relname = :statchunk; relpages | reltuples ----------+----------- - 1 | 26 + 0 | 0 (1 row) -- Verify that decompressing the chunk restores autoanalyze to the hypertable's setting SELECT reloptions FROM pg_class WHERE relname = :statchunk; - reloptions ----------------------------- - {autovacuum_enabled=false} + reloptions +------------ + (1 row) SELECT decompress_chunk(c) FROM show_chunks('stattest') c; @@ -1353,9 +1356,9 @@ SELECT decompress_chunk(c) FROM show_chunks('stattest') c; (1 row) SELECT reloptions FROM pg_class WHERE relname = :statchunk; - reloptions ---------------------------- - {autovacuum_enabled=true} + reloptions +------------ + (1 row) SELECT compress_chunk(c) FROM show_chunks('stattest') c; @@ -1365,9 +1368,9 @@ SELECT compress_chunk(c) FROM show_chunks('stattest') c; (1 row) SELECT reloptions FROM pg_class WHERE relname = :statchunk; - reloptions ----------------------------- - {autovacuum_enabled=false} + reloptions +------------ + (1 row) ALTER TABLE stattest SET (autovacuum_enabled = false); @@ -1412,7 +1415,7 @@ SELECT relname, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END AS reltuples, order by relname; relname | reltuples | relpages | relallvisible --------------------+-----------+----------+--------------- - _hyper_29_58_chunk | 200 | 2 | 0 + _hyper_29_58_chunk | 0 | 0 | 0 _hyper_29_59_chunk | 0 | 0 | 0 (2 rows) @@ -1452,7 +1455,7 @@ SELECT relname, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END AS reltuples, ORDER BY relname; relname | reltuples | relpages | relallvisible --------------------+-----------+----------+--------------- - _hyper_29_58_chunk | 200 | 1 | 0 + _hyper_29_58_chunk | 0 | 0 | 0 _hyper_29_59_chunk | 0 | 0 | 0 (2 rows) @@ -1475,7 +1478,7 @@ SELECT relname, reltuples, relpages, relallvisible FROM pg_class ORDER BY relname; relname | reltuples | relpages | relallvisible --------------------+-----------+----------+--------------- - _hyper_29_58_chunk | 200 | 1 | 0 + _hyper_29_58_chunk | 0 | 0 | 0 _hyper_29_59_chunk | 200 | 2 | 0 (2 rows) diff --git a/tsl/test/expected/telemetry_stats-12.out b/tsl/test/expected/telemetry_stats-12.out index a68498af3cc..1ef97a3b8b1 100644 --- a/tsl/test/expected/telemetry_stats-12.out +++ b/tsl/test/expected/telemetry_stats-12.out @@ -418,7 +418,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 122880, + "num_children": 9, + "num_relations": 1, + - "num_reltuples": 697 + + "num_reltuples": 413 + }, + "materialized_views": { + "toast_size": 8192, + @@ -452,7 +452,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 180224, + "num_children": 4, + "num_relations": 2, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 1, + "num_caggs_on_distributed_hypertables": 0, + @@ -790,7 +790,7 @@ FROM relations; "indexes_size": 0, + "num_children": 18, + "num_relations": 1, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 0, + "num_replicated_distributed_hypertables": 0+ } @@ -827,7 +827,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 357 + "num_reltuples": 285 } (1 row) @@ -857,7 +857,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 340 + "num_reltuples": 296 } (1 row) @@ -901,7 +901,7 @@ FROM relations; "indexes_size": 0, + "num_children": 36, + "num_relations": 2, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 18, + "num_replicated_distributed_hypertables": 1+ } @@ -949,10 +949,10 @@ FROM relations; "uncompressed_toast_size": 0, + "uncompressed_indexes_size": 81920 + }, + - "indexes_size": 409600, + + "indexes_size": 393216, + "num_children": 8, + "num_relations": 4, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 2, + "num_caggs_on_distributed_hypertables": 2,+ diff --git a/tsl/test/expected/telemetry_stats-13.out b/tsl/test/expected/telemetry_stats-13.out index a68498af3cc..1ef97a3b8b1 100644 --- a/tsl/test/expected/telemetry_stats-13.out +++ b/tsl/test/expected/telemetry_stats-13.out @@ -418,7 +418,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 122880, + "num_children": 9, + "num_relations": 1, + - "num_reltuples": 697 + + "num_reltuples": 413 + }, + "materialized_views": { + "toast_size": 8192, + @@ -452,7 +452,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 180224, + "num_children": 4, + "num_relations": 2, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 1, + "num_caggs_on_distributed_hypertables": 0, + @@ -790,7 +790,7 @@ FROM relations; "indexes_size": 0, + "num_children": 18, + "num_relations": 1, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 0, + "num_replicated_distributed_hypertables": 0+ } @@ -827,7 +827,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 357 + "num_reltuples": 285 } (1 row) @@ -857,7 +857,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 340 + "num_reltuples": 296 } (1 row) @@ -901,7 +901,7 @@ FROM relations; "indexes_size": 0, + "num_children": 36, + "num_relations": 2, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 18, + "num_replicated_distributed_hypertables": 1+ } @@ -949,10 +949,10 @@ FROM relations; "uncompressed_toast_size": 0, + "uncompressed_indexes_size": 81920 + }, + - "indexes_size": 409600, + + "indexes_size": 393216, + "num_children": 8, + "num_relations": 4, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 2, + "num_caggs_on_distributed_hypertables": 2,+ diff --git a/tsl/test/expected/telemetry_stats-14.out b/tsl/test/expected/telemetry_stats-14.out index a68498af3cc..1ef97a3b8b1 100644 --- a/tsl/test/expected/telemetry_stats-14.out +++ b/tsl/test/expected/telemetry_stats-14.out @@ -418,7 +418,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 122880, + "num_children": 9, + "num_relations": 1, + - "num_reltuples": 697 + + "num_reltuples": 413 + }, + "materialized_views": { + "toast_size": 8192, + @@ -452,7 +452,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 180224, + "num_children": 4, + "num_relations": 2, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 1, + "num_caggs_on_distributed_hypertables": 0, + @@ -790,7 +790,7 @@ FROM relations; "indexes_size": 0, + "num_children": 18, + "num_relations": 1, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 0, + "num_replicated_distributed_hypertables": 0+ } @@ -827,7 +827,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 357 + "num_reltuples": 285 } (1 row) @@ -857,7 +857,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 340 + "num_reltuples": 296 } (1 row) @@ -901,7 +901,7 @@ FROM relations; "indexes_size": 0, + "num_children": 36, + "num_relations": 2, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 18, + "num_replicated_distributed_hypertables": 1+ } @@ -949,10 +949,10 @@ FROM relations; "uncompressed_toast_size": 0, + "uncompressed_indexes_size": 81920 + }, + - "indexes_size": 409600, + + "indexes_size": 393216, + "num_children": 8, + "num_relations": 4, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 2, + "num_caggs_on_distributed_hypertables": 2,+ diff --git a/tsl/test/expected/telemetry_stats-15.out b/tsl/test/expected/telemetry_stats-15.out index 9b4c4fa1951..bf5b93eab0e 100644 --- a/tsl/test/expected/telemetry_stats-15.out +++ b/tsl/test/expected/telemetry_stats-15.out @@ -418,7 +418,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 122880, + "num_children": 9, + "num_relations": 1, + - "num_reltuples": 697 + + "num_reltuples": 413 + }, + "materialized_views": { + "toast_size": 8192, + @@ -452,7 +452,7 @@ SELECT jsonb_pretty(rels) AS relations FROM relations; "indexes_size": 180224, + "num_children": 4, + "num_relations": 2, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 1, + "num_caggs_on_distributed_hypertables": 0, + @@ -790,7 +790,7 @@ FROM relations; "indexes_size": 0, + "num_children": 18, + "num_relations": 1, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 0, + "num_replicated_distributed_hypertables": 0+ } @@ -827,7 +827,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 368 + "num_reltuples": 312 } (1 row) @@ -857,7 +857,7 @@ distributed_hypertables_dn "indexes_size": 278528, "num_children": 9, "num_relations": 1, - "num_reltuples": 329 + "num_reltuples": 269 } (1 row) @@ -901,7 +901,7 @@ FROM relations; "indexes_size": 0, + "num_children": 36, + "num_relations": 2, + - "num_reltuples": 697, + + "num_reltuples": 581, + "num_replica_chunks": 18, + "num_replicated_distributed_hypertables": 1+ } @@ -949,10 +949,10 @@ FROM relations; "uncompressed_toast_size": 0, + "uncompressed_indexes_size": 81920 + }, + - "indexes_size": 409600, + + "indexes_size": 393216, + "num_children": 8, + "num_relations": 4, + - "num_reltuples": 452, + + "num_reltuples": 0, + "num_caggs_nested": 0, + "num_caggs_finalized": 2, + "num_caggs_on_distributed_hypertables": 2,+ diff --git a/tsl/test/expected/transparent_decompression-12.out b/tsl/test/expected/transparent_decompression-12.out index 3d9171ae210..ca1a72757d1 100644 --- a/tsl/test/expected/transparent_decompression-12.out +++ b/tsl/test/expected/transparent_decompression-12.out @@ -1915,31 +1915,26 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 -> Index Scan using compress_hyper_5_15_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3, compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 2520 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 -> Index Scan using compress_hyper_5_16_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3, compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, 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, compress_hyper_5_16_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(24 rows) +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -2235,14 +2230,14 @@ 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" = m2."time") AND (m1.device_id = m2.device_id)) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: quicksort + -> Sort (actual rows=10 loops=1) + Sort Key: m1."time", m1.device_id + Sort Method: top-N heapsort + -> Hash Join (actual rows=6840 loops=1) + Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=6840 loops=1) Order: m1."time" -> Sort (actual rows=1800 loops=1) @@ -2256,23 +2251,22 @@ FROM :TEST_TABLE m1 Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=2520 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m2."time", m2.device_id - Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=6840 loops=1) - Order: m2."time" - -> Sort (actual rows=1800 loops=1) - Sort Key: m2_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=2520 loops=1) - -> Sort (actual rows=2520 loops=1) - Sort Key: m2_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=2520 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=5 loops=1) -(35 rows) + -> Hash (actual rows=6840 loops=1) + Buckets: 16384 Batches: 1 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=6840 loops=1) + Order: m2."time" + -> Sort (actual rows=1800 loops=1) + Sort Key: m2_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=2520 loops=1) + -> Sort (actual rows=2520 loops=1) + Sort Key: m2_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=2520 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=5 loops=1) +(34 rows) :PREFIX SELECT * @@ -2456,14 +2450,14 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) - -> Merge Left Join (actual rows=10 loops=1) - Merge Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: quicksort + -> Sort (actual rows=10 loops=1) + Sort Key: m1."time", m1.device_id + Sort Method: top-N heapsort + -> Hash Left Join (actual rows=6840 loops=1) + Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) -> Custom Scan (ChunkAppend) on metrics m1 (actual rows=6840 loops=1) Order: m1."time" -> Sort (actual rows=1800 loops=1) @@ -2477,23 +2471,22 @@ LIMIT 10; Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m1_3 (actual rows=2520 loops=1) -> Seq Scan on compress_hyper_5_16_chunk (actual rows=5 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m2."time", m2.device_id - Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=6840 loops=1) - Order: m2."time" - -> Sort (actual rows=1800 loops=1) - Sort Key: m2_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) - -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=2520 loops=1) - -> Sort (actual rows=2520 loops=1) - Sort Key: m2_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=2520 loops=1) - -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=5 loops=1) -(35 rows) + -> Hash (actual rows=6840 loops=1) + Buckets: 16384 Batches: 1 + -> Custom Scan (ChunkAppend) on metrics m2 (actual rows=6840 loops=1) + Order: m2."time" + -> Sort (actual rows=1800 loops=1) + Sort Key: m2_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_1_chunk m2_1 (actual rows=1800 loops=1) + -> Seq Scan on compress_hyper_5_15_chunk compress_hyper_5_15_chunk_1 (actual rows=5 loops=1) + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _hyper_1_2_chunk m2_2 (actual rows=2520 loops=1) + -> Sort (actual rows=2520 loops=1) + Sort Key: m2_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_1_3_chunk m2_3 (actual rows=2520 loops=1) + -> Seq Scan on compress_hyper_5_16_chunk compress_hyper_5_16_chunk_1 (actual rows=5 loops=1) +(34 rows) :PREFIX SELECT * @@ -5438,70 +5431,49 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 -> Index Scan using compress_hyper_6_17_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=0 loops=1) Output: compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3, compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_17_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 -> Index Scan using compress_hyper_6_18_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=0 loops=1) Output: compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3, compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_18_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 -> Index Scan using compress_hyper_6_19_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=0 loops=1) Output: compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3, compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_19_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Filter: (_hyper_2_7_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Filter: (_hyper_2_8_chunk.device_id_peer = 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Filter: (_hyper_2_9_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Index Cond: (_hyper_2_7_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Index Cond: (_hyper_2_8_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Index Cond: (_hyper_2_9_chunk.device_id_peer = 1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 -> Index Scan using compress_hyper_6_20_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=0 loops=1) Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_20_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 -> Index Scan using compress_hyper_6_21_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=0 loops=1) Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_21_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) - Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 - Filter: (_hyper_2_12_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 -(63 rows) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) +(42 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -5963,16 +5935,16 @@ 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."time") - -> Merge Join (actual rows=10 loops=1) - Merge Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: quicksort + -> Sort (actual rows=10 loops=1) + Sort Key: m1."time", m1.device_id + Sort Method: top-N heapsort + -> Hash Join (actual rows=6840 loops=1) + Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + -> Hash Join (actual rows=6840 loops=1) + Hash Cond: (m1."time" = m3."time") -> Append (actual rows=6840 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1 (actual rows=360 loops=1) -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) @@ -5988,9 +5960,18 @@ FROM :TEST_TABLE m1 -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_7 (actual rows=1512 loops=1) -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) -> Seq Scan on _hyper_2_12_chunk m1_8 (actual rows=504 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m2."time", m2.device_id - Sort Method: quicksort + -> Hash (actual rows=1368 loops=1) + Buckets: 2048 Batches: 1 + -> Append (actual rows=1368 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + -> Seq Scan on _hyper_2_9_chunk m3_1 (actual rows=504 loops=1) + Filter: (device_id = 3) + -> Seq Scan on _hyper_2_12_chunk m3_2 (actual rows=504 loops=1) + Filter: (device_id = 3) + -> Hash (actual rows=6840 loops=1) + Buckets: 16384 Batches: 1 -> Append (actual rows=6840 loops=1) -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2 (actual rows=360 loops=1) -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) @@ -6006,20 +5987,7 @@ FROM :TEST_TABLE m1 -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m2_7 (actual rows=1512 loops=1) -> Seq Scan on compress_hyper_6_21_chunk compress_hyper_6_21_chunk_1 (actual rows=3 loops=1) -> Seq Scan on _hyper_2_12_chunk m2_8 (actual rows=504 loops=1) - -> Materialize (actual rows=10 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3."time" - -> Sort (actual rows=3 loops=1) - Sort Key: m3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_1 (actual rows=1 loops=1) - Filter: (device_id = 3) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) -(54 rows) +(50 rows) :PREFIX SELECT * diff --git a/tsl/test/expected/transparent_decompression-13.out b/tsl/test/expected/transparent_decompression-13.out index 57b941203b5..bd447e53cbf 100644 --- a/tsl/test/expected/transparent_decompression-13.out +++ b/tsl/test/expected/transparent_decompression-13.out @@ -2055,31 +2055,26 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 -> Index Scan using compress_hyper_5_15_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3, compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 2520 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 -> Index Scan using compress_hyper_5_16_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3, compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, 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, compress_hyper_5_16_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(24 rows) +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -3244,64 +3239,32 @@ FROM :TEST_TABLE WHERE device_id IN (1, 2) ORDER BY time, device_id; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------ - Incremental Sort (actual rows=2736 loops=1) - Sort Key: metrics_space."time", metrics_space.device_id - Presorted Key: metrics_space."time" - Full-sort Groups: 86 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=2736 loops=1) - Order: metrics_space."time" - -> Merge Append (actual rows=720 loops=1) - Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 - -> Merge Append (actual rows=1008 loops=1) - Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=504 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=504 loops=1) + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=2736 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Result (actual rows=2736 loops=1) + -> Append (actual rows=2736 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 + -> Seq Scan on _hyper_2_7_chunk (actual rows=504 loops=1) Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 1008 - -> Merge Append (actual rows=1008 loops=1) - Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) - Filter: (device_id = ANY ('{1,2}'::integer[])) - Rows Removed by Filter: 2 -(55 rows) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=504 loops=1) + Index Cond: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=504 loops=1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=1 loops=1) + Filter: (device_id = ANY ('{1,2}'::integer[])) + Rows Removed by Filter: 2 +(23 rows) -- test empty targetlist :PREFIX @@ -3624,84 +3587,42 @@ WHERE device_id IS NULL ORDER BY time, device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=0 loops=1) - -> Incremental Sort (actual rows=0 loops=1) - Sort Key: metrics_space."time", metrics_space.device_id - Presorted Key: metrics_space."time" - Full-sort Groups: 1 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=0 loops=1) - Order: metrics_space."time" - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=0 loops=1) - Filter: (device_id IS NULL) - Rows Removed by Filter: 1 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=0 loops=1) - Filter: (device_id IS NULL) - Rows Removed by Filter: 3 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) - -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) - Filter: (device_id IS NULL) - Rows Removed by Filter: 1 - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=0 loops=1) + -> Sort (actual rows=0 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=0 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=0 loops=1) + Rows Removed by Filter: 1 + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=0 loops=1) + Rows Removed by Filter: 3 + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 504 - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=0 loops=1) - Filter: (device_id IS NULL) - Rows Removed by Filter: 1 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=0 loops=1) - Filter: (device_id IS NULL) - Rows Removed by Filter: 3 - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=0 loops=1) + Rows Removed by Filter: 1 + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=0 loops=1) + Index Cond: (device_id IS NULL) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=0 loops=1) + Index Cond: (device_id IS NULL) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=0 loops=1) + Index Cond: (device_id IS NULL) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=0 loops=1) Filter: (device_id IS NULL) - Rows Removed by Filter: 504 -(75 rows) + Rows Removed by Filter: 1 + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=0 loops=1) + Filter: (device_id IS NULL) + Rows Removed by Filter: 3 + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=0 loops=1) + Index Cond: (device_id IS NULL) +(33 rows) -- test IN (Const,Const) :PREFIX @@ -4406,89 +4327,47 @@ WHERE v0 < 1 ORDER BY time, device_id LIMIT 10; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=0 loops=1) - -> Incremental Sort (actual rows=0 loops=1) - Sort Key: metrics_space."time", metrics_space.device_id - Presorted Key: metrics_space."time" - Full-sort Groups: 1 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=0 loops=1) - Order: metrics_space."time" - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=0 loops=1) - Filter: (_ts_meta_min_1 < 1) - Rows Removed by Filter: 1 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=0 loops=1) - Filter: (_ts_meta_min_1 < 1) - Rows Removed by Filter: 3 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) - Filter: (_ts_meta_min_1 < 1) - Rows Removed by Filter: 1 - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - Rows Removed by Filter: 504 - -> Merge Append (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=0 loops=1) - Filter: (_ts_meta_min_1 < 1) - Rows Removed by Filter: 1 - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=0 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=0 loops=1) - Filter: (_ts_meta_min_1 < 1) - Rows Removed by Filter: 3 - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=0 loops=1) - Filter: (v0 < 1) - Rows Removed by Filter: 504 -(80 rows) + -> Sort (actual rows=0 loops=1) + Sort Key: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=0 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=0 loops=1) + Filter: (_ts_meta_min_1 < 1) + Rows Removed by Filter: 1 + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=0 loops=1) + Filter: (_ts_meta_min_1 < 1) + Rows Removed by Filter: 3 + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=0 loops=1) + Filter: (_ts_meta_min_1 < 1) + Rows Removed by Filter: 1 + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_7_chunk (actual rows=0 loops=1) + Index Cond: (v0 < 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_8_chunk (actual rows=0 loops=1) + Index Cond: (v0 < 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _hyper_2_9_chunk (actual rows=0 loops=1) + Index Cond: (v0 < 1) + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=0 loops=1) + Filter: (_ts_meta_min_1 < 1) + Rows Removed by Filter: 1 + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=0 loops=1) + Filter: (v0 < 1) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=0 loops=1) + Filter: (_ts_meta_min_1 < 1) + Rows Removed by Filter: 3 + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _hyper_2_12_chunk (actual rows=0 loops=1) + Index Cond: (v0 < 1) +(38 rows) :PREFIX SELECT * @@ -5207,63 +5086,41 @@ FROM :TEST_TABLE WHERE time > '2000-01-08' ORDER BY time, device_id; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=4195 loops=1) - Output: metrics_space."time", metrics_space.device_id, metrics_space.device_id_peer, metrics_space.v0, metrics_space.v1, metrics_space.v2, metrics_space.v3 - Sort Key: metrics_space."time", metrics_space.device_id - Presorted Key: metrics_space."time" - Full-sort Groups: 120 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on public.metrics_space (actual rows=4195 loops=1) - Output: metrics_space."time", metrics_space.device_id, metrics_space.device_id_peer, metrics_space.v0, metrics_space.v1, metrics_space.v2, metrics_space.v3 - Order: metrics_space."time" - Startup Exclusion: false - Runtime Exclusion: false - -> Merge Append (actual rows=1675 loops=1) - Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Merge Append (actual rows=2520 loops=1) - Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) - 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 - Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) - Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 - Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=1512 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 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 - Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) - Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 - Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 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) -(54 rows) + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=4195 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=4195 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 507 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) + 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 + Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) + 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 + Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(32 rows) -- should produce ordered path :PREFIX_VERBOSE @@ -5518,48 +5375,41 @@ ORDER BY device_id, v1 DESC, time, v3; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=4195 loops=1) + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Sort (actual rows=4195 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time", _hyper_2_7_chunk.v3 - Presorted Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk."time" - Full-sort Groups: 132 Sort Method: quicksort - -> Merge Append (actual rows=4195 loops=1) - Sort Key: _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1 DESC, _hyper_2_7_chunk."time" - -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) + Sort Method: quicksort + -> Append (actual rows=4195 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=335 loops=1) Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Index Cond: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) + Filter: (_hyper_2_7_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1005 loops=1) Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Index Cond: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_t on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) + Filter: (_hyper_2_8_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 507 + -> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=335 loops=1) Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Index Cond: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Sort (actual rows=504 loops=1) + Filter: (_hyper_2_9_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1 DESC, _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) - Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 - Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) + Filter: (_hyper_2_10_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1) + Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 + Filter: (compress_hyper_6_20_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1 DESC, _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 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 - Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) - Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 - Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v1_ on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) + Filter: (_hyper_2_11_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1) + Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 + Filter: (compress_hyper_6_21_chunk._ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1) 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) -(39 rows) + Filter: (_hyper_2_12_chunk."time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(32 rows) -- should produce ordered path -- ASC/DESC for segmentby columns can be pushed down @@ -5667,47 +5517,32 @@ FROM :TEST_TABLE WHERE time > '2000-01-08' ORDER BY time, device_id; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------- - Incremental Sort (actual rows=4195 loops=1) - Sort Key: metrics_space."time", metrics_space.device_id - Presorted Key: metrics_space."time" - Full-sort Groups: 120 Sort Method: quicksort - -> Custom Scan (ChunkAppend) on metrics_space (actual rows=4195 loops=1) - Order: metrics_space."time" - -> Merge Append (actual rows=1675 loops=1) - Sort Key: _hyper_2_7_chunk."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk (actual rows=335 loops=1) - Index Cond: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk (actual rows=1005 loops=1) - Index Cond: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk (actual rows=335 loops=1) - Index Cond: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Merge Append (actual rows=2520 loops=1) - Sort Key: _hyper_2_10_chunk."time" - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=504 loops=1) - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) - Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) - Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Sort (actual rows=1512 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Sort (actual rows=1512 loops=1) - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) - Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) - Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk (actual rows=504 loops=1) - Index Cond: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) -(38 rows) + QUERY PLAN +--------------------------------------------------------------------------------------------------------- + Sort (actual rows=4195 loops=1) + Sort Key: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id + Sort Method: quicksort + -> Append (actual rows=4195 loops=1) + -> Seq Scan on _hyper_2_7_chunk (actual rows=335 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Seq Scan on _hyper_2_8_chunk (actual rows=1005 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 507 + -> Seq Scan on _hyper_2_9_chunk (actual rows=335 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + Rows Removed by Filter: 169 + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk (actual rows=504 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on compress_hyper_6_20_chunk (actual rows=1 loops=1) + Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk (actual rows=1512 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on compress_hyper_6_21_chunk (actual rows=3 loops=1) + Filter: (_ts_meta_max_3 > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) + -> Seq Scan on _hyper_2_12_chunk (actual rows=504 loops=1) + Filter: ("time" > 'Sat Jan 08 00:00:00 2000 PST'::timestamp with time zone) +(23 rows) -- test runtime exclusion -- first chunk should be excluded @@ -6279,70 +6114,49 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 Sort Key: _hyper_2_4_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 - Sort Key: _hyper_2_4_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=0 loops=1) Output: _hyper_2_4_chunk."time", _hyper_2_4_chunk.device_id, _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.v0, _hyper_2_4_chunk.v1, _hyper_2_4_chunk.v2, _hyper_2_4_chunk.v3 -> Index Scan using compress_hyper_6_17_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=0 loops=1) Output: compress_hyper_6_17_chunk."time", compress_hyper_6_17_chunk.device_id, compress_hyper_6_17_chunk.device_id_peer, compress_hyper_6_17_chunk.v0, compress_hyper_6_17_chunk.v1, compress_hyper_6_17_chunk.v2, compress_hyper_6_17_chunk.v3, compress_hyper_6_17_chunk._ts_meta_count, compress_hyper_6_17_chunk._ts_meta_sequence_num, compress_hyper_6_17_chunk._ts_meta_min_3, compress_hyper_6_17_chunk._ts_meta_max_3, compress_hyper_6_17_chunk._ts_meta_min_1, compress_hyper_6_17_chunk._ts_meta_max_1, compress_hyper_6_17_chunk._ts_meta_min_2, compress_hyper_6_17_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_17_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 - Sort Key: _hyper_2_5_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=0 loops=1) Output: _hyper_2_5_chunk."time", _hyper_2_5_chunk.device_id, _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.v0, _hyper_2_5_chunk.v1, _hyper_2_5_chunk.v2, _hyper_2_5_chunk.v3 -> Index Scan using compress_hyper_6_18_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=0 loops=1) Output: compress_hyper_6_18_chunk."time", compress_hyper_6_18_chunk.device_id, compress_hyper_6_18_chunk.device_id_peer, compress_hyper_6_18_chunk.v0, compress_hyper_6_18_chunk.v1, compress_hyper_6_18_chunk.v2, compress_hyper_6_18_chunk.v3, compress_hyper_6_18_chunk._ts_meta_count, compress_hyper_6_18_chunk._ts_meta_sequence_num, compress_hyper_6_18_chunk._ts_meta_min_3, compress_hyper_6_18_chunk._ts_meta_max_3, compress_hyper_6_18_chunk._ts_meta_min_1, compress_hyper_6_18_chunk._ts_meta_max_1, compress_hyper_6_18_chunk._ts_meta_min_2, compress_hyper_6_18_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_18_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 - Sort Key: _hyper_2_6_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=0 loops=1) Output: _hyper_2_6_chunk."time", _hyper_2_6_chunk.device_id, _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.v0, _hyper_2_6_chunk.v1, _hyper_2_6_chunk.v2, _hyper_2_6_chunk.v3 -> Index Scan using compress_hyper_6_19_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=0 loops=1) Output: compress_hyper_6_19_chunk."time", compress_hyper_6_19_chunk.device_id, compress_hyper_6_19_chunk.device_id_peer, compress_hyper_6_19_chunk.v0, compress_hyper_6_19_chunk.v1, compress_hyper_6_19_chunk.v2, compress_hyper_6_19_chunk.v3, compress_hyper_6_19_chunk._ts_meta_count, compress_hyper_6_19_chunk._ts_meta_sequence_num, compress_hyper_6_19_chunk._ts_meta_min_3, compress_hyper_6_19_chunk._ts_meta_max_3, compress_hyper_6_19_chunk._ts_meta_min_1, compress_hyper_6_19_chunk._ts_meta_max_1, compress_hyper_6_19_chunk._ts_meta_min_2, compress_hyper_6_19_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_19_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) - Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 - Filter: (_hyper_2_7_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) - Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 - Filter: (_hyper_2_8_chunk.device_id_peer = 1) - Rows Removed by Filter: 1512 - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) - Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 - Filter: (_hyper_2_9_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 - Sort Key: _hyper_2_10_chunk."time" - Sort Method: quicksort + -> Index Scan using _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_7_chunk (actual rows=0 loops=1) + Output: _hyper_2_7_chunk."time", _hyper_2_7_chunk.device_id, _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.v0, _hyper_2_7_chunk.v1, _hyper_2_7_chunk.v2, _hyper_2_7_chunk.v3 + Index Cond: (_hyper_2_7_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_8_chunk (actual rows=0 loops=1) + Output: _hyper_2_8_chunk."time", _hyper_2_8_chunk.device_id, _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.v0, _hyper_2_8_chunk.v1, _hyper_2_8_chunk.v2, _hyper_2_8_chunk.v3 + Index Cond: (_hyper_2_8_chunk.device_id_peer = 1) + -> Index Scan using _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 on _timescaledb_internal._hyper_2_9_chunk (actual rows=0 loops=1) + Output: _hyper_2_9_chunk."time", _hyper_2_9_chunk.device_id, _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.v0, _hyper_2_9_chunk.v1, _hyper_2_9_chunk.v2, _hyper_2_9_chunk.v3 + Index Cond: (_hyper_2_9_chunk.device_id_peer = 1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=0 loops=1) Output: _hyper_2_10_chunk."time", _hyper_2_10_chunk.device_id, _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.v0, _hyper_2_10_chunk.v1, _hyper_2_10_chunk.v2, _hyper_2_10_chunk.v3 -> Index Scan using compress_hyper_6_20_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=0 loops=1) Output: compress_hyper_6_20_chunk."time", compress_hyper_6_20_chunk.device_id, compress_hyper_6_20_chunk.device_id_peer, compress_hyper_6_20_chunk.v0, compress_hyper_6_20_chunk.v1, compress_hyper_6_20_chunk.v2, compress_hyper_6_20_chunk.v3, compress_hyper_6_20_chunk._ts_meta_count, compress_hyper_6_20_chunk._ts_meta_sequence_num, compress_hyper_6_20_chunk._ts_meta_min_3, compress_hyper_6_20_chunk._ts_meta_max_3, 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, compress_hyper_6_20_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_20_chunk.device_id_peer = 1) - -> Sort (actual rows=0 loops=1) - Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 - Sort Key: _hyper_2_11_chunk."time" - Sort Method: quicksort -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=0 loops=1) Output: _hyper_2_11_chunk."time", _hyper_2_11_chunk.device_id, _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.v0, _hyper_2_11_chunk.v1, _hyper_2_11_chunk.v2, _hyper_2_11_chunk.v3 -> Index Scan using compress_hyper_6_21_chunk__compressed_hypertable_6_device_id_pe on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=0 loops=1) Output: compress_hyper_6_21_chunk."time", compress_hyper_6_21_chunk.device_id, compress_hyper_6_21_chunk.device_id_peer, compress_hyper_6_21_chunk.v0, compress_hyper_6_21_chunk.v1, compress_hyper_6_21_chunk.v2, compress_hyper_6_21_chunk.v3, compress_hyper_6_21_chunk._ts_meta_count, compress_hyper_6_21_chunk._ts_meta_sequence_num, compress_hyper_6_21_chunk._ts_meta_min_3, compress_hyper_6_21_chunk._ts_meta_max_3, 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, compress_hyper_6_21_chunk._ts_meta_max_2 Index Cond: (compress_hyper_6_21_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) - Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 - Filter: (_hyper_2_12_chunk.device_id_peer = 1) - Rows Removed by Filter: 504 -(63 rows) + -> Index Scan using _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 on _timescaledb_internal._hyper_2_12_chunk (actual rows=0 loops=1) + Output: _hyper_2_12_chunk."time", _hyper_2_12_chunk.device_id, _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.v0, _hyper_2_12_chunk.v1, _hyper_2_12_chunk.v2, _hyper_2_12_chunk.v3 + Index Cond: (_hyper_2_12_chunk.device_id_peer = 1) +(42 rows) :PREFIX_VERBOSE SELECT device_id_peer @@ -6872,129 +6686,129 @@ FROM :TEST_TABLE m1 ORDER BY m1.time, m1.device_id LIMIT 10; - QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +--------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (actual rows=10 loops=1) -> Incremental Sort (actual rows=10 loops=1) Sort Key: m1."time", m1.device_id Presorted Key: m1."time" Full-sort Groups: 1 Sort Method: quicksort -> Merge Join (actual rows=11 loops=1) - Merge Cond: (m1."time" = m3_1."time") - -> Merge Join (actual rows=11 loops=1) - Merge Cond: (m1."time" = m2."time") - Join Filter: (m1.device_id = m2.device_id) - Rows Removed by Join Filter: 40 - -> Custom Scan (ChunkAppend) on metrics_space m1 (actual rows=11 loops=1) - Order: m1."time" - -> Merge Append (actual rows=11 loops=1) - Sort Key: m1_1."time" - -> Sort (actual rows=3 loops=1) - Sort Key: m1_1."time" + Merge Cond: (m2."time" = m1."time") + Join Filter: (m1.device_id = m2.device_id) + Rows Removed by Join Filter: 40 + -> Custom Scan (ChunkAppend) on metrics_space m2 (actual rows=11 loops=1) + Order: m2."time" + -> Merge Append (actual rows=11 loops=1) + Sort Key: m2_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m2_1."time" + Sort Method: quicksort + -> Sort (actual rows=360 loops=1) + Sort Key: m2_1."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: m1_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) - -> Sort (actual rows=7 loops=1) - Sort Key: m1_2."time" + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) + -> Sort (actual rows=7 loops=1) + Sort Key: m2_2."time" + Sort Method: quicksort + -> Sort (actual rows=1080 loops=1) + Sort Key: m2_2."time" Sort Method: quicksort - -> Sort (actual rows=1080 loops=1) - Sort Key: m1_2."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: m1_3."time" + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: m2_3."time" + Sort Method: quicksort + -> Sort (actual rows=360 loops=1) + Sort Key: m2_3."time" Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: m1_3."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) - -> Merge Append (never executed) - Sort Key: m1_4."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_4 (never executed) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m1_5 (never executed) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m1_6 (never executed) - -> Merge Append (never executed) - Sort Key: m1_7."time" + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) + -> Merge Append (never executed) + Sort Key: m2_4."time" + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m2_4 (never executed) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m2_5 (never executed) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m2_6 (never executed) + -> Merge Append (never executed) + Sort Key: m2_7."time" + -> Sort (never executed) + Sort Key: m2_7."time" -> Sort (never executed) - Sort Key: m1_7."time" - -> Sort (never executed) - Sort Key: m1_7."time" - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (never executed) - -> Seq Scan on compress_hyper_6_20_chunk (never executed) + Sort Key: m2_7."time" + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m2_7 (never executed) + -> Seq Scan on compress_hyper_6_20_chunk compress_hyper_6_20_chunk_1 (never executed) + -> Sort (never executed) + Sort Key: m2_8."time" -> Sort (never executed) - Sort Key: m1_8."time" - -> Sort (never executed) - Sort Key: m1_8."time" - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (never executed) - -> Seq Scan on compress_hyper_6_21_chunk (never executed) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m1_9 (never executed) - -> Materialize (actual rows=51 loops=1) - -> Custom Scan (ChunkAppend) on metrics_space m2 (actual rows=11 loops=1) - Order: m2."time" - -> Merge Append (actual rows=11 loops=1) - Sort Key: m2_1."time" - -> Sort (actual rows=3 loops=1) - Sort Key: m2_1."time" - Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: m2_1."time" + Sort Key: m2_8."time" + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m2_8 (never executed) + -> Seq Scan on compress_hyper_6_21_chunk compress_hyper_6_21_chunk_1 (never executed) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m2_9 (never executed) + -> Materialize (actual rows=51 loops=1) + -> Merge Join (actual rows=11 loops=1) + Merge Cond: (m3_1."time" = m1."time") + -> Merge Append (actual rows=3 loops=1) + Sort Key: m3_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m3_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_2 (actual rows=1 loops=1) + Filter: (device_id = 3) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_3 (actual rows=1 loops=1) + Filter: (device_id = 3) + -> Materialize (actual rows=11 loops=1) + -> Custom Scan (ChunkAppend) on metrics_space m1 (actual rows=11 loops=1) + Order: m1."time" + -> Merge Append (actual rows=11 loops=1) + Sort Key: m1_1."time" + -> Sort (actual rows=3 loops=1) + Sort Key: m1_1."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m2_1 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_17_chunk compress_hyper_6_17_chunk_1 (actual rows=1 loops=1) - -> Sort (actual rows=7 loops=1) - Sort Key: m2_2."time" - Sort Method: quicksort - -> Sort (actual rows=1080 loops=1) - Sort Key: m2_2."time" + -> Sort (actual rows=360 loops=1) + Sort Key: m1_1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_2_4_chunk m1_1 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_17_chunk (actual rows=1 loops=1) + -> Sort (actual rows=7 loops=1) + Sort Key: m1_2."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m2_2 (actual rows=1080 loops=1) - -> Seq Scan on compress_hyper_6_18_chunk compress_hyper_6_18_chunk_1 (actual rows=3 loops=1) - -> Sort (actual rows=3 loops=1) - Sort Key: m2_3."time" - Sort Method: quicksort - -> Sort (actual rows=360 loops=1) - Sort Key: m2_3."time" + -> Sort (actual rows=1080 loops=1) + Sort Key: m1_2."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_2_5_chunk m1_2 (actual rows=1080 loops=1) + -> Seq Scan on compress_hyper_6_18_chunk (actual rows=3 loops=1) + -> Sort (actual rows=3 loops=1) + Sort Key: m1_3."time" Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m2_3 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_1 (actual rows=1 loops=1) - -> Merge Append (never executed) - Sort Key: m2_4."time" - -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m2_4 (never executed) - -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m2_5 (never executed) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m2_6 (never executed) - -> Merge Append (never executed) - Sort Key: m2_7."time" - -> Sort (never executed) - Sort Key: m2_7."time" + -> Sort (actual rows=360 loops=1) + Sort Key: m1_3."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m1_3 (actual rows=360 loops=1) + -> Seq Scan on compress_hyper_6_19_chunk (actual rows=1 loops=1) + -> Merge Append (never executed) + Sort Key: m1_4."time" + -> Index Scan Backward using _hyper_2_7_chunk_metrics_space_time_idx on _hyper_2_7_chunk m1_4 (never executed) + -> Index Scan Backward using _hyper_2_8_chunk_metrics_space_time_idx on _hyper_2_8_chunk m1_5 (never executed) + -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m1_6 (never executed) + -> Merge Append (never executed) + Sort Key: m1_7."time" -> Sort (never executed) - Sort Key: m2_7."time" - -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m2_7 (never executed) - -> Seq Scan on compress_hyper_6_20_chunk compress_hyper_6_20_chunk_1 (never executed) - -> Sort (never executed) - Sort Key: m2_8."time" + Sort Key: m1_7."time" + -> Sort (never executed) + Sort Key: m1_7."time" + -> Custom Scan (DecompressChunk) on _hyper_2_10_chunk m1_7 (never executed) + -> Seq Scan on compress_hyper_6_20_chunk (never executed) -> Sort (never executed) - Sort Key: m2_8."time" - -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m2_8 (never executed) - -> Seq Scan on compress_hyper_6_21_chunk compress_hyper_6_21_chunk_1 (never executed) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m2_9 (never executed) - -> Materialize (actual rows=11 loops=1) - -> Merge Append (actual rows=3 loops=1) - Sort Key: m3_1."time" - -> Sort (actual rows=3 loops=1) - Sort Key: m3_1."time" - Sort Method: quicksort - -> Custom Scan (DecompressChunk) on _hyper_2_6_chunk m3_1 (actual rows=360 loops=1) - -> Seq Scan on compress_hyper_6_19_chunk compress_hyper_6_19_chunk_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - -> Index Scan Backward using _hyper_2_9_chunk_metrics_space_time_idx on _hyper_2_9_chunk m3_2 (actual rows=1 loops=1) - Filter: (device_id = 3) - -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m3_3 (actual rows=1 loops=1) - Filter: (device_id = 3) + Sort Key: m1_8."time" + -> Sort (never executed) + Sort Key: m1_8."time" + -> Custom Scan (DecompressChunk) on _hyper_2_11_chunk m1_8 (never executed) + -> Seq Scan on compress_hyper_6_21_chunk (never executed) + -> Index Scan Backward using _hyper_2_12_chunk_metrics_space_time_idx on _hyper_2_12_chunk m1_9 (never executed) (121 rows) :PREFIX diff --git a/tsl/test/expected/transparent_decompression-14.out b/tsl/test/expected/transparent_decompression-14.out index 57b941203b5..97d01070442 100644 --- a/tsl/test/expected/transparent_decompression-14.out +++ b/tsl/test/expected/transparent_decompression-14.out @@ -2055,31 +2055,26 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 -> Index Scan using compress_hyper_5_15_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3, compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 2520 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 -> Index Scan using compress_hyper_5_16_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3, compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, 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, compress_hyper_5_16_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(24 rows) +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer diff --git a/tsl/test/expected/transparent_decompression-15.out b/tsl/test/expected/transparent_decompression-15.out index 14ffada10c5..340f72eafea 100644 --- a/tsl/test/expected/transparent_decompression-15.out +++ b/tsl/test/expected/transparent_decompression-15.out @@ -2056,31 +2056,26 @@ ORDER BY device_id_peer, time; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Merge Append (actual rows=0 loops=1) + Sort (actual rows=0 loops=1) + Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 Sort Key: _hyper_1_1_chunk."time" - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 - Sort Key: _hyper_1_1_chunk."time" - Sort Method: quicksort + Sort Method: quicksort + -> Append (actual rows=0 loops=1) -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=0 loops=1) Output: _hyper_1_1_chunk."time", _hyper_1_1_chunk.device_id, _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.v0, _hyper_1_1_chunk.v1, _hyper_1_1_chunk.v2, _hyper_1_1_chunk.v3 -> Index Scan using compress_hyper_5_15_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=0 loops=1) Output: compress_hyper_5_15_chunk."time", compress_hyper_5_15_chunk.device_id, compress_hyper_5_15_chunk.device_id_peer, compress_hyper_5_15_chunk.v0, compress_hyper_5_15_chunk.v1, compress_hyper_5_15_chunk.v2, compress_hyper_5_15_chunk.v3, compress_hyper_5_15_chunk._ts_meta_count, compress_hyper_5_15_chunk._ts_meta_sequence_num, compress_hyper_5_15_chunk._ts_meta_min_3, compress_hyper_5_15_chunk._ts_meta_max_3, compress_hyper_5_15_chunk._ts_meta_min_1, compress_hyper_5_15_chunk._ts_meta_max_1, compress_hyper_5_15_chunk._ts_meta_min_2, compress_hyper_5_15_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_15_chunk.device_id_peer = 1) - -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) - Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 - Filter: (_hyper_1_2_chunk.device_id_peer = 1) - Rows Removed by Filter: 2520 - -> Sort (actual rows=0 loops=1) - Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 - Sort Key: _hyper_1_3_chunk."time" - Sort Method: quicksort + -> Index Scan Backward using _hyper_1_2_chunk_metrics_time_idx on _timescaledb_internal._hyper_1_2_chunk (actual rows=0 loops=1) + Output: _hyper_1_2_chunk."time", _hyper_1_2_chunk.device_id, _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.v0, _hyper_1_2_chunk.v1, _hyper_1_2_chunk.v2, _hyper_1_2_chunk.v3 + Filter: (_hyper_1_2_chunk.device_id_peer = 1) + Rows Removed by Filter: 2520 -> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=0 loops=1) Output: _hyper_1_3_chunk."time", _hyper_1_3_chunk.device_id, _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.v0, _hyper_1_3_chunk.v1, _hyper_1_3_chunk.v2, _hyper_1_3_chunk.v3 -> Index Scan using compress_hyper_5_16_chunk__compressed_hypertable_5_device_id_pe on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=0 loops=1) Output: compress_hyper_5_16_chunk."time", compress_hyper_5_16_chunk.device_id, compress_hyper_5_16_chunk.device_id_peer, compress_hyper_5_16_chunk.v0, compress_hyper_5_16_chunk.v1, compress_hyper_5_16_chunk.v2, compress_hyper_5_16_chunk.v3, compress_hyper_5_16_chunk._ts_meta_count, compress_hyper_5_16_chunk._ts_meta_sequence_num, compress_hyper_5_16_chunk._ts_meta_min_3, compress_hyper_5_16_chunk._ts_meta_max_3, 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, compress_hyper_5_16_chunk._ts_meta_max_2 Index Cond: (compress_hyper_5_16_chunk.device_id_peer = 1) -(24 rows) +(19 rows) :PREFIX_VERBOSE SELECT device_id_peer diff --git a/tsl/test/isolation/expected/compression_chunk_race.out b/tsl/test/isolation/expected/compression_chunk_race.out index d9b8995d5e0..4958efb2dca 100644 --- a/tsl/test/isolation/expected/compression_chunk_race.out +++ b/tsl/test/isolation/expected/compression_chunk_race.out @@ -38,10 +38,10 @@ step s3_unlock_compression: SELECT locktype, mode, granted, objid FROM pg_locks WHERE not granted AND (locktype = 'advisory' or relation::regclass::text LIKE '%chunk') ORDER BY relation, locktype, mode, granted; SELECT debug_waitpoint_release('compress_chunk_impl_start'); -locktype|mode |granted| objid ---------+---------+-------+---------- -relation|ShareLock|f | -advisory|ShareLock|f |3379597659 +locktype|mode |granted| objid +--------+-------------+-------+---------- +relation|ExclusiveLock|f | +advisory|ShareLock |f |3379597659 (2 rows) debug_waitpoint_release diff --git a/tsl/test/shared/expected/ordered_append_join-12.out b/tsl/test/shared/expected/ordered_append_join-12.out index 0dd248afb7e..59de08031e3 100644 --- a/tsl/test/shared/expected/ordered_append_join-12.out +++ b/tsl/test/shared/expected/ordered_append_join-12.out @@ -2495,11 +2495,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1.device_id = o2.device_id) AND (o1."time" = o2."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1."time" = o2."time") AND (o1.device_id = o2.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1."time", o1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1 (actual rows=17990 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=20 loops=1) @@ -2507,16 +2507,17 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_2 (actual rows=25190 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2 (actual rows=17990 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) -(22 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2."time", o2.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2 (actual rows=17990 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) +(23 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable @@ -3585,11 +3586,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1.device_id = o2.device_id) AND (o1."time" = o2."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1."time" = o2."time") AND (o1.device_id = o2.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1."time", o1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) @@ -3609,28 +3610,29 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=18 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_8 (actual rows=5038 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=6 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=10794 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) -(46 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2."time", o2.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=10794 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) +(47 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable diff --git a/tsl/test/shared/expected/ordered_append_join-13.out b/tsl/test/shared/expected/ordered_append_join-13.out index 331f80f0b1b..5a33f69fa17 100644 --- a/tsl/test/shared/expected/ordered_append_join-13.out +++ b/tsl/test/shared/expected/ordered_append_join-13.out @@ -2495,11 +2495,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=17990 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=20 loops=1) @@ -2507,16 +2507,17 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_3 (actual rows=25190 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) -(22 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) +(23 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable @@ -3585,11 +3586,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) @@ -3609,28 +3610,29 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=18 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_9 (actual rows=5038 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=6 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) -(46 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) +(47 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable diff --git a/tsl/test/shared/expected/ordered_append_join-14.out b/tsl/test/shared/expected/ordered_append_join-14.out index 331f80f0b1b..5a33f69fa17 100644 --- a/tsl/test/shared/expected/ordered_append_join-14.out +++ b/tsl/test/shared/expected/ordered_append_join-14.out @@ -2495,11 +2495,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=17990 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=20 loops=1) @@ -2507,16 +2507,17 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_3 (actual rows=25190 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) -(22 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) +(23 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable @@ -3585,11 +3586,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) @@ -3609,28 +3610,29 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=18 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_9 (actual rows=5038 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=6 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) -(46 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) +(47 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable diff --git a/tsl/test/shared/expected/ordered_append_join-15.out b/tsl/test/shared/expected/ordered_append_join-15.out index ab6519db67d..35ae5c96eff 100644 --- a/tsl/test/shared/expected/ordered_append_join-15.out +++ b/tsl/test/shared/expected/ordered_append_join-15.out @@ -2511,11 +2511,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=17990 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=20 loops=1) @@ -2523,16 +2523,17 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_3 (actual rows=25190 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk (actual rows=30 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) -(22 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=17990 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=25190 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=30 loops=1) +(23 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable @@ -3605,11 +3606,11 @@ FROM :TEST_TABLE o1 LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) - Sort Key: o1_1."time" - Sort Method: top-N heapsort - -> Hash Join (actual rows=68370 loops=1) - Hash Cond: ((o1_1.device_id = o2_1.device_id) AND (o1_1."time" = o2_1."time")) + -> Merge Join (actual rows=100 loops=1) + Merge Cond: ((o1_1."time" = o2_1."time") AND (o1_1.device_id = o2_1.device_id)) + -> Sort (actual rows=100 loops=1) + Sort Key: o1_1."time", o1_1.device_id + Sort Method: quicksort -> Append (actual rows=68370 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_1 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=4 loops=1) @@ -3629,28 +3630,29 @@ QUERY PLAN -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=18 loops=1) -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o1_9 (actual rows=5038 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk (actual rows=6 loops=1) - -> Hash (actual rows=68370 loops=1) - Buckets: 131072 Batches: 1 - -> Append (actual rows=68370 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) -(46 rows) + -> Sort (actual rows=100 loops=1) + Sort Key: o2_1."time", o2_1.device_id + Sort Method: quicksort + -> Append (actual rows=68370 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_1 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_2 (actual rows=10794 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=12 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_3 (actual rows=3598 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_4 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_5 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_6 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_7 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_8 (actual rows=15114 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=18 loops=1) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk o2_9 (actual rows=5038 loops=1) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_6_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=6 loops=1) +(47 rows) -- test JOIN on device_id -- should not use ordered append for 2nd hypertable diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-13.out b/tsl/test/shared/expected/transparent_decompress_chunk-13.out index 0d432f33be5..fd5d2224dfc 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-13.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-13.out @@ -668,18 +668,21 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=304 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -693,25 +696,27 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m2."time" = m1."time") AND (m2.device_id = m1.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 (originally 8192) Batches: 1 (originally 1) - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m3."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=1) - Index Cond: (device_id = 3) -(19 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: (m1."time" = m3."time") + Rows Removed by Join Filter: 35969 + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) + Index Cond: (device_id = 3) +(21 rows) :PREFIX SELECT * @@ -782,18 +787,21 @@ ORDER BY m1.time, LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop Left Join (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -808,21 +816,26 @@ ORDER BY m1.time, LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) + -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m2."time") + Presorted Key: m1."time" + Full-sort Groups: 3 Sort Method: quicksort + -> Merge Left Join (actual rows=101 loops=1) + Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 14392 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) + Rows Removed by Join Filter: 81 + -> Sort (actual rows=101 loops=1) + Sort Key: m1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Sort (actual rows=102 loops=1) + Sort Key: m2."time" + Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) Index Cond: (device_id = 2) -(15 rows) +(20 rows) SET parallel_leader_participation TO false; -- test implicit self-join diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-14.out b/tsl/test/shared/expected/transparent_decompress_chunk-14.out index 0d432f33be5..0e39ad0d625 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-14.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-14.out @@ -668,18 +668,21 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -693,25 +696,27 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m2."time" = m1."time") AND (m2.device_id = m1.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 (originally 8192) Batches: 1 (originally 1) - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m3."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=1) - Index Cond: (device_id = 3) -(19 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: (m1."time" = m3."time") + Rows Removed by Join Filter: 35969 + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) + Index Cond: (device_id = 3) +(21 rows) :PREFIX SELECT * @@ -782,18 +787,21 @@ ORDER BY m1.time, LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop Left Join (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -808,21 +816,26 @@ ORDER BY m1.time, LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) + -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m2."time") + Presorted Key: m1."time" + Full-sort Groups: 3 Sort Method: quicksort + -> Merge Left Join (actual rows=101 loops=1) + Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 14392 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) + Rows Removed by Join Filter: 81 + -> Sort (actual rows=101 loops=1) + Sort Key: m1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Sort (actual rows=102 loops=1) + Sort Key: m2."time" + Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) Index Cond: (device_id = 2) -(15 rows) +(20 rows) SET parallel_leader_participation TO false; -- test implicit self-join diff --git a/tsl/test/shared/expected/transparent_decompress_chunk-15.out b/tsl/test/shared/expected/transparent_decompress_chunk-15.out index a4f50eefc67..07fbb18c7d5 100644 --- a/tsl/test/shared/expected/transparent_decompress_chunk-15.out +++ b/tsl/test/shared/expected/transparent_decompress_chunk-15.out @@ -670,18 +670,21 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -695,25 +698,27 @@ FROM :TEST_TABLE m1 LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: ((m2."time" = m1."time") AND (m2.device_id = m1.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 (originally 8192) Batches: 1 (originally 1) - -> Hash Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m3."time") - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=1) - -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=1) - Index Cond: (device_id = 3) -(19 rows) + -> Nested Loop (actual rows=10 loops=1) + Join Filter: (m1."time" = m3."time") + Rows Removed by Join Filter: 35969 + -> Nested Loop (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m3 (actual rows=3598 loops=10) + -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_2 (actual rows=4 loops=10) + Index Cond: (device_id = 3) +(21 rows) :PREFIX SELECT * @@ -784,18 +789,21 @@ ORDER BY m1.time, LIMIT 10; QUERY PLAN Limit (actual rows=10 loops=1) - -> Sort (actual rows=10 loops=1) - Sort Key: m1."time", m1.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=17990 loops=1) - Buckets: 32768 Batches: 1 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=1) -(12 rows) + -> Nested Loop Left Join (actual rows=10 loops=1) + Join Filter: ((m1."time" = m2."time") AND (m1.device_id = m2.device_id)) + Rows Removed by Join Filter: 179889 + -> Gather Merge (actual rows=10 loops=1) + Workers Planned: 1 + Workers Launched: 1 + -> Sort (actual rows=5 loops=2) + Sort Key: m1."time", m1.device_id + Sort Method: quicksort + Worker 0: Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=8995 loops=2) + -> Parallel Seq Scan on compress_hyper_X_X_chunk (actual rows=10 loops=2) + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=17990 loops=10) + -> Seq Scan on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=20 loops=10) +(15 rows) :PREFIX SELECT * @@ -810,21 +818,26 @@ ORDER BY m1.time, LIMIT 100; QUERY PLAN Limit (actual rows=100 loops=1) - -> Sort (actual rows=100 loops=1) + -> Incremental Sort (actual rows=100 loops=1) Sort Key: m1."time", m1.device_id, m2."time", m2.device_id - Sort Method: top-N heapsort - -> Hash Left Join (actual rows=17990 loops=1) - Hash Cond: (m1."time" = m2."time") + Presorted Key: m1."time" + Full-sort Groups: 3 Sort Method: quicksort + -> Merge Left Join (actual rows=101 loops=1) + Merge Cond: (m1."time" = m2."time") Join Filter: (m1.device_id = 1) - Rows Removed by Join Filter: 14392 - -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) - -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) - -> Hash (actual rows=3598 loops=1) - Buckets: 4096 (originally 1024) Batches: 1 (originally 1) + Rows Removed by Join Filter: 81 + -> Sort (actual rows=101 loops=1) + Sort Key: m1."time" + Sort Method: quicksort + -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m1 (actual rows=17990 loops=1) + -> Seq Scan on compress_hyper_X_X_chunk (actual rows=20 loops=1) + -> Sort (actual rows=102 loops=1) + Sort Key: m2."time" + Sort Method: quicksort -> Custom Scan (DecompressChunk) on _hyper_X_X_chunk m2 (actual rows=3598 loops=1) -> Index Scan using compress_hyper_X_X_chunk__compressed_hypertable_4_device_id__t on compress_hyper_X_X_chunk compress_hyper_X_X_chunk_1 (actual rows=4 loops=1) Index Cond: (device_id = 2) -(15 rows) +(20 rows) SET parallel_leader_participation TO false; -- test implicit self-join diff --git a/tsl/test/sql/chunk_merge.sql b/tsl/test/sql/chunk_merge.sql index cf9f6745fe6..ffdcb636c28 100644 --- a/tsl/test/sql/chunk_merge.sql +++ b/tsl/test/sql/chunk_merge.sql @@ -74,4 +74,4 @@ FROM test1 GROUP BY i, bucket; -- Merging cagg chunks should also work. -SELECT _timescaledb_internal.test_merge_chunks_on_dimension('_timescaledb_internal._hyper_4_37_chunk','_timescaledb_internal._hyper_4_39_chunk', 4); +SELECT _timescaledb_internal.test_merge_chunks_on_dimension('_timescaledb_internal._hyper_4_37_chunk','_timescaledb_internal._hyper_4_40_chunk', 4); diff --git a/tsl/test/sql/compression.sql b/tsl/test/sql/compression.sql index 03e349e6187..d42e2c1a16a 100644 --- a/tsl/test/sql/compression.sql +++ b/tsl/test/sql/compression.sql @@ -533,7 +533,8 @@ ALTER TABLE stattest SET (timescaledb.compress); SELECT approximate_row_count('stattest'); SELECT compress_chunk(c) FROM show_chunks('stattest') c; SELECT approximate_row_count('stattest'); -SELECT relpages, reltuples FROM pg_class WHERE relname = :statchunk; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :statchunk; SELECT histogram_bounds FROM pg_stats WHERE tablename = :statchunk AND attname = 'c1'; SELECT compch.table_name as "STAT_COMP_CHUNK_NAME" @@ -550,10 +551,12 @@ ANALYZE stattest; SELECT histogram_bounds FROM pg_stats WHERE tablename = :statchunk AND attname = 'c1'; -- Unfortunately, the stats on the hypertable won't find any rows to sample from the chunk SELECT histogram_bounds FROM pg_stats WHERE tablename = 'stattest' AND attname = 'c1'; -SELECT relpages, reltuples FROM pg_class WHERE relname = :statchunk; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :statchunk; -- verify that corresponding compressed chunk's stats is updated as well. -SELECT relpages, reltuples FROM pg_class WHERE relname = :'STAT_COMP_CHUNK_NAME'; +-- reltuples is initially -1 on PG14 before VACUUM/ANALYZE was run +SELECT relpages, CASE WHEN reltuples > 0 THEN reltuples ELSE 0 END as reltuples FROM pg_class WHERE relname = :'STAT_COMP_CHUNK_NAME'; -- Verify that even a global analyze doesn't affect the chunk stats, changing message scope here -- to hide WARNINGs for skipped tables