timescaledb/tsl/test/sql/include/transparent_decompression_constraintaware.sql
Sven Klemm 0c1f967ef8 Refactor transparent_decompression test
This PR reduces the dataset size in the transparent_decompression
test to make it finish in a more reasonable time. It also splits
the test and modifies queries that used now(). Due to the change
in dataset size the resulting diff is rather large but is mostly
row count changes in the plan but the actual plan shapes don't
change. In addition to those changes to some LATERAL queries
additional constraints have been added to reduce the number of
loops.
2020-06-25 18:42:54 +02:00

109 lines
2.4 KiB
SQL

-- This file and its contents are licensed under the Timescale License.
-- Please see the included NOTICE for copyright information and
-- LICENSE-TIMESCALE for a copy of the license.
--- TEST for constraint aware append ------------
--should select only newly added chunk --
SET timescaledb.enable_chunk_append TO FALSE;
:PREFIX
SELECT *
FROM (
SELECT *
FROM metrics_ordered_idx
WHERE time > '2002-01-01'
AND time < now()
ORDER BY time DESC
LIMIT 10) AS q
ORDER BY 1,
2,
3,
4;
-- DecompressChunk path because segmentby columns have equality constraints
:PREFIX
SELECT *
FROM (
SELECT *
FROM metrics_ordered_idx
WHERE device_id = 4
AND device_id_peer = 5
AND time > '2002-01-01'
AND time < now()
ORDER BY time DESC
LIMIT 10) AS q
ORDER BY 1,
2,
3,
4;
:PREFIX
SELECT m.device_id,
d.v0,
count(*)
FROM metrics_ordered_idx d,
metrics_ordered_idx m
WHERE m.device_id = d.device_id
AND m.device_id_peer = 5
AND m.time = d.time
AND m.time > '2002-01-01'
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
AND m.device_id_peer = d.device_id_peer
GROUP BY m.device_id,
d.v0
ORDER BY 1,
2,
3;
--query with no results --
:PREFIX
SELECT m.device_id,
d.v0,
count(*)
FROM metrics_ordered_idx d,
metrics_ordered_idx m
WHERE m.time = d.time
AND m.time > '2000-01-01 0:00:00+0'::text::timestamptz
GROUP BY m.device_id,
d.v0
ORDER BY 1,
2,
3;
--query with all chunks but 1 excluded at plan time --
:PREFIX
SELECT d.*,
m.*
FROM device_tbl d,
metrics_ordered_idx m
WHERE m.device_id = d.device_id
AND m.time > '2019-01-01'
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
ORDER BY m.v0;
-- no matches in metrics_ordered_idx but one row in device_tbl
:PREFIX
SELECT d.*,
m.*
FROM device_tbl d
LEFT OUTER JOIN metrics_ordered_idx m ON m.device_id = d.device_id
AND m.time > '2019-01-01'
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
WHERE d.device_id = 8
ORDER BY m.v0;
-- no matches in device_tbl but 1 row in metrics_ordered_idx
:PREFIX
SELECT d.*,
m.*
FROM device_tbl d
FULL OUTER JOIN metrics_ordered_idx m ON m.device_id = d.device_id
AND m.time > '2019-01-01'
AND m.time < '2000-01-01 0:00:00+0'::text::timestamptz
WHERE m.device_id = 7
ORDER BY m.v0;
SET timescaledb.enable_chunk_append TO TRUE;