Remove BitmapScan support in DecompressChunk

We don't want to support BitmapScans below DecompressChunk
as this adds additional complexity to support and there
is little benefit in doing so.
This fixes a bug that can happen when we have a parameterized
BitmapScan that is parameterized on a compressed column and
will lead to an execution failure with an error regarding
incorrect attribute types in the expression.
This commit is contained in:
Sven Klemm 2022-11-01 10:25:46 +01:00 committed by Sven Klemm
parent bfef3173bc
commit 9744b4f3bc
9 changed files with 100 additions and 226 deletions

View File

@ -30,8 +30,9 @@ argument or resolve the type ambiguity by casting to the intended type.
* #4823 Fix a crash that could occur when using nested user-defined functions with hypertables.
**Thanks**
* @jvanns for reporting hypertable FK reference to vanilla PostgreSQL partitioned table doesn't seem to work
* @jflambert for reporting a crash with nested user-defined functions.
* @jvanns for reporting hypertable FK reference to vanilla PostgreSQL partitioned table doesn't seem to work
* @xvaara for helping reproduce a bug with bitmap scans in transparent decompression
## 2.8.1 (2022-10-06)

View File

@ -425,6 +425,17 @@ ts_decompress_chunk_generate_paths(PlannerInfo *root, RelOptInfo *chunk_rel, Hyp
Path *child_path = lfirst(lc);
DecompressChunkPath *path;
/*
* We skip any BitmapScan paths here as supporting those
* would require fixing up the internal scan. Since we
* currently do not do this BitmapScans would be generated
* when we have a parameterized path on a compressed column
* that would have invalid references due to our
* EquivalenceClasses.
*/
if (IsA(child_path, BitmapHeapPath))
continue;
/*
* Filter out all paths that try to JOIN the compressed chunk on the
* hypertable or the uncompressed chunk

View File

@ -394,19 +394,6 @@ decompress_chunk_plan_create(PlannerInfo *root, RelOptInfo *rel, CustomPath *pat
}
indexplan->qual = indexqual;
}
else if (IsA(compressed_path, BitmapHeapPath))
{
/* To increase performance, we should remove quals that are redundant with the Bitmap scan
* Code from create_bitmap_scan_plan does something similar, and could be used as a starting
* point.
*/
foreach (lc, clauses)
{
RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);
decompress_plan->scan.plan.qual =
lappend(decompress_plan->scan.plan.qual, rinfo->clause);
}
}
else
{
foreach (lc, clauses)

View File

@ -2128,9 +2128,6 @@ WHERE device_id IN (
(18 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -2141,25 +2138,21 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1)
Output: _hyper_1_1_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_15_chunk."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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_15_chunk.device_id = 1)
Filter: (compress_hyper_5_15_chunk.device_id = 1)
Rows Removed by Filter: 4
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1)
Output: _hyper_1_2_chunk.device_id_peer
Filter: (_hyper_1_2_chunk.device_id = 1)
Rows Removed by Filter: 2016
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1)
Output: _hyper_1_3_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_16_chunk."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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_16_chunk.device_id = 1)
(21 rows)
Filter: (compress_hyper_5_16_chunk.device_id = 1)
Rows Removed by Filter: 4
(17 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -2183,12 +2176,9 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2)
Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_1_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_15_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2)
Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id)
@ -2196,16 +2186,11 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2)
Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_3_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_16_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(33 rows)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(27 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,
@ -5813,9 +5798,6 @@ WHERE device_id IN (
(52 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -5826,27 +5808,18 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
Recheck Cond: (compress_hyper_6_17_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_17_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_17_chunk.device_id = 1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Filter: (compress_hyper_6_17_chunk.device_id = 1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer
Recheck Cond: (_hyper_2_7_chunk.device_id = 1)
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
Index Cond: (_hyper_2_7_chunk.device_id = 1)
Filter: (_hyper_2_7_chunk.device_id = 1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
Recheck Cond: (compress_hyper_6_20_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_20_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_20_chunk.device_id = 1)
(23 rows)
Filter: (compress_hyper_6_20_chunk.device_id = 1)
(14 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -5862,49 +5835,39 @@ WHERE device_id IN (
-> Append (actual rows=6840 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id
-> Index Scan using compress_hyper_6_17_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1)
Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id
-> Index Scan using compress_hyper_6_18_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1)
Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id
-> Index Scan using compress_hyper_6_19_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id
Heap Blocks: exact=13
-> Bitmap Index Scan on _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=1512 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id
-> Index Scan using compress_hyper_6_20_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1)
Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id
-> Index Scan using compress_hyper_6_21_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1)
-> 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 (actual rows=504 loops=1)
-> Hash (actual rows=2 loops=1)
Output: "*VALUES*".column1
Buckets: 1024 Batches: 1
-> Values Scan on "*VALUES*" (actual rows=2 loops=1)
Output: "*VALUES*".column1
(45 rows)
(37 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,

View File

@ -2268,9 +2268,6 @@ WHERE device_id IN (
(18 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -2281,25 +2278,21 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1)
Output: _hyper_1_1_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_15_chunk."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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_15_chunk.device_id = 1)
Filter: (compress_hyper_5_15_chunk.device_id = 1)
Rows Removed by Filter: 4
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1)
Output: _hyper_1_2_chunk.device_id_peer
Filter: (_hyper_1_2_chunk.device_id = 1)
Rows Removed by Filter: 2016
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1)
Output: _hyper_1_3_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_16_chunk."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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_16_chunk.device_id = 1)
(21 rows)
Filter: (compress_hyper_5_16_chunk.device_id = 1)
Rows Removed by Filter: 4
(17 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -2323,12 +2316,9 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2)
Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_1_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_15_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2)
Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id)
@ -2336,16 +2326,11 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2)
Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_3_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_16_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(33 rows)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(27 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,
@ -6654,9 +6639,6 @@ WHERE device_id IN (
(52 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -6667,27 +6649,18 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
Recheck Cond: (compress_hyper_6_17_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_17_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_17_chunk.device_id = 1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Filter: (compress_hyper_6_17_chunk.device_id = 1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer
Recheck Cond: (_hyper_2_7_chunk.device_id = 1)
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
Index Cond: (_hyper_2_7_chunk.device_id = 1)
Filter: (_hyper_2_7_chunk.device_id = 1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
Recheck Cond: (compress_hyper_6_20_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_20_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_20_chunk.device_id = 1)
(23 rows)
Filter: (compress_hyper_6_20_chunk.device_id = 1)
(14 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -6703,49 +6676,39 @@ WHERE device_id IN (
-> Append (actual rows=6840 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id
-> Index Scan using compress_hyper_6_17_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1)
Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id
-> Index Scan using compress_hyper_6_18_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1)
Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id
-> Index Scan using compress_hyper_6_19_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id
Heap Blocks: exact=13
-> Bitmap Index Scan on _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=1512 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id
-> Index Scan using compress_hyper_6_20_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1)
Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id
-> Index Scan using compress_hyper_6_21_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1)
-> 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 (actual rows=504 loops=1)
-> Hash (actual rows=2 loops=1)
Output: "*VALUES*".column1
Buckets: 1024 Batches: 1
-> Values Scan on "*VALUES*" (actual rows=2 loops=1)
Output: "*VALUES*".column1
(45 rows)
(37 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,

View File

@ -2268,9 +2268,6 @@ WHERE device_id IN (
(18 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -2281,25 +2278,21 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=1)
Output: _hyper_1_1_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_15_chunk."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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_15_chunk.device_id = 1)
Filter: (compress_hyper_5_15_chunk.device_id = 1)
Rows Removed by Filter: 4
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=1)
Output: _hyper_1_2_chunk.device_id_peer
Filter: (_hyper_1_2_chunk.device_id = 1)
Rows Removed by Filter: 2016
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=1)
Output: _hyper_1_3_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=1)
Output: compress_hyper_5_16_chunk."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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_5_16_chunk.device_id = 1)
(21 rows)
Filter: (compress_hyper_5_16_chunk.device_id = 1)
Rows Removed by Filter: 4
(17 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -2323,12 +2316,9 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_1_chunk (actual rows=360 loops=2)
Output: _hyper_1_1_chunk.device_id_peer, _hyper_1_1_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_1_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_15_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_15_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_15_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
Index Cond: (compress_hyper_5_15_chunk.device_id = "*VALUES*".column1)
-> Seq Scan on _timescaledb_internal._hyper_1_2_chunk (actual rows=504 loops=2)
Output: _hyper_1_2_chunk.device_id_peer, _hyper_1_2_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_2_chunk.device_id)
@ -2336,16 +2326,11 @@ WHERE device_id IN (
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_1_3_chunk (actual rows=504 loops=2)
Output: _hyper_1_3_chunk.device_id_peer, _hyper_1_3_chunk.device_id
Filter: ("*VALUES*".column1 = _hyper_1_3_chunk.device_id)
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
-> Index Scan using compress_hyper_5_16_chunk_c_index_2 on _timescaledb_internal.compress_hyper_5_16_chunk (actual rows=1 loops=2)
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
Recheck Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
Heap Blocks: exact=2
-> Bitmap Index Scan on compress_hyper_5_16_chunk_c_index_2 (actual rows=1 loops=2)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(33 rows)
Index Cond: (compress_hyper_5_16_chunk.device_id = "*VALUES*".column1)
(27 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,
@ -6654,9 +6639,6 @@ WHERE device_id IN (
(52 rows)
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -6667,27 +6649,18 @@ WHERE device_id IN (
Append (actual rows=1368 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
Recheck Cond: (compress_hyper_6_17_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_17_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_17_chunk.device_id = 1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Filter: (compress_hyper_6_17_chunk.device_id = 1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer
Recheck Cond: (_hyper_2_7_chunk.device_id = 1)
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
Index Cond: (_hyper_2_7_chunk.device_id = 1)
Filter: (_hyper_2_7_chunk.device_id = 1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer
-> Bitmap Heap Scan on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
Recheck Cond: (compress_hyper_6_20_chunk.device_id = 1)
Heap Blocks: exact=1
-> Bitmap Index Scan on compress_hyper_6_20_chunk_c_space_index_2 (actual rows=1 loops=1)
Index Cond: (compress_hyper_6_20_chunk.device_id = 1)
(23 rows)
Filter: (compress_hyper_6_20_chunk.device_id = 1)
(14 rows)
:PREFIX_VERBOSE
SELECT device_id_peer
@ -6703,49 +6676,39 @@ WHERE device_id IN (
-> Append (actual rows=6840 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_4_chunk (actual rows=360 loops=1)
Output: _hyper_2_4_chunk.device_id_peer, _hyper_2_4_chunk.device_id
-> Index Scan using compress_hyper_6_17_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_17_chunk (actual rows=1 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_5_chunk (actual rows=1080 loops=1)
Output: _hyper_2_5_chunk.device_id_peer, _hyper_2_5_chunk.device_id
-> Index Scan using compress_hyper_6_18_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_18_chunk (actual rows=3 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_6_chunk (actual rows=360 loops=1)
Output: _hyper_2_6_chunk.device_id_peer, _hyper_2_6_chunk.device_id
-> Index Scan using compress_hyper_6_19_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 loops=1)
-> Seq Scan on _timescaledb_internal.compress_hyper_6_19_chunk (actual rows=1 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_7_chunk (actual rows=504 loops=1)
Output: _hyper_2_7_chunk.device_id_peer, _hyper_2_7_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_7_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_8_chunk (actual rows=1512 loops=1)
Output: _hyper_2_8_chunk.device_id_peer, _hyper_2_8_chunk.device_id
Heap Blocks: exact=13
-> Bitmap Index Scan on _hyper_2_8_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=1512 loops=1)
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_9_chunk (actual rows=504 loops=1)
Output: _hyper_2_9_chunk.device_id_peer, _hyper_2_9_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_9_chunk_metrics_space_device_id_device_id_peer_v0_v1_2 (actual rows=504 loops=1)
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_10_chunk (actual rows=504 loops=1)
Output: _hyper_2_10_chunk.device_id_peer, _hyper_2_10_chunk.device_id
-> Index Scan using compress_hyper_6_20_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_20_chunk (actual rows=1 loops=1)
-> 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
-> Custom Scan (DecompressChunk) on _timescaledb_internal._hyper_2_11_chunk (actual rows=1512 loops=1)
Output: _hyper_2_11_chunk.device_id_peer, _hyper_2_11_chunk.device_id
-> Index Scan using compress_hyper_6_21_chunk_c_space_index_2 on _timescaledb_internal.compress_hyper_6_21_chunk (actual rows=3 loops=1)
-> 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
-> Bitmap Heap Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
-> Seq Scan on _timescaledb_internal._hyper_2_12_chunk (actual rows=504 loops=1)
Output: _hyper_2_12_chunk.device_id_peer, _hyper_2_12_chunk.device_id
Heap Blocks: exact=5
-> Bitmap Index Scan on _hyper_2_12_chunk_metrics_space_device_id_device_id_peer_v0_v_2 (actual rows=504 loops=1)
-> Hash (actual rows=2 loops=1)
Output: "*VALUES*".column1
Buckets: 1024 Batches: 1
-> Values Scan on "*VALUES*" (actual rows=2 loops=1)
Output: "*VALUES*".column1
(45 rows)
(37 rows)
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,

View File

@ -114,8 +114,6 @@ GROUP BY
_timescaledb_internal._hyper_
(1 row)
-- make sure we get bitmapheapscan
SET enable_indexscan TO FALSE;
SELECT
*
FROM

View File

@ -88,9 +88,6 @@ FROM
GROUP BY
tableoid;
-- make sure we get bitmapheapscan
SET enable_indexscan TO FALSE;
SELECT
*
FROM

View File

@ -626,11 +626,6 @@ WHERE device_id IN (
RESET seq_page_cost;
-- force a BitmapHeapScan
SET enable_indexscan TO FALSE;
SET enable_seqscan TO FALSE;
:PREFIX_VERBOSE
SELECT device_id_peer
FROM :TEST_TABLE
@ -644,10 +639,6 @@ WHERE device_id IN (
VALUES (1),
(2));
SET enable_indexscan TO TRUE;
SET enable_seqscan TO TRUE;
-- test view
CREATE OR REPLACE VIEW compressed_view AS
SELECT time,