1
0
mirror of https://github.com/timescale/timescaledb.git synced 2025-05-28 01:30:29 +08:00
Sven Klemm 393cc68057 Simplify compress_chunk calls in tests
Dont construct chunk names from internal catalog tables in
tests but instead use show_chunks and the informational views.
2023-11-04 20:08:28 +01:00

113 lines
4.6 KiB
Plaintext

-- 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.
CREATE TABLE target (
time TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
value DOUBLE PRECISION NOT NULL,
series_id BIGINT NOT NULL,
partition_column TIMESTAMPTZ NOT NULL
);
SELECT table_name FROM create_hypertable(
'target'::regclass,
'partition_column'::name, chunk_time_interval=>interval '8 hours',
create_default_indexes=> false);
table_name
------------
target
(1 row)
-- enable compression
ALTER TABLE target SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'series_id',
timescaledb.compress_orderby = 'partition_column, value'
);
SELECT '2022-10-10 14:33:44.1234+05:30' as start_date \gset
INSERT INTO target (series_id, value, partition_column)
SELECT s,1,t from generate_series(:'start_date'::timestamptz, :'start_date'::timestamptz + interval '1 day', '5m') t cross join
generate_series(1,3, 1) s;
-- compress chunks
SELECT count(compress_chunk(ch)) FROM show_chunks('target') ch;
count
-------
4
(1 row)
CREATE TABLE source (
time TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
value DOUBLE PRECISION NOT NULL,
series_id BIGINT NOT NULL
);
SELECT table_name FROM create_hypertable(
'source'::regclass,
'time'::name, chunk_time_interval=>interval '6 hours',
create_default_indexes=> false);
table_name
------------
source
(1 row)
SELECT '2022-10-10 10:00:00.0123+05:30' as start_date \gset
INSERT INTO source (time, series_id, value)
SELECT t, s,1 from generate_series(:'start_date'::timestamptz, :'start_date'::timestamptz + interval '1 day', '5m') t cross join
generate_series(1,2, 1) s;
\set ON_ERROR_STOP 0
-- Merge UPDATE on compressed hypertables should report error
MERGE INTO target t
USING source s
ON t.value = s.value AND t.series_id = s.series_id
WHEN MATCHED THEN
UPDATE SET series_id = (t.series_id * 0.123);
ERROR: The MERGE command with UPDATE/DELETE merge actions is not support on compressed hypertables
-- Merge DELETE on compressed hypertables should report error
MERGE INTO target t
USING source s
ON t.value = s.value AND t.series_id = s.series_id
WHEN MATCHED THEN
DELETE;
ERROR: The MERGE command with UPDATE/DELETE merge actions is not support on compressed hypertables
-- Merge UPDATE/INSERT on compressed hypertables should report error
MERGE INTO target t
USING source s
ON t.value = s.value AND t.series_id = s.series_id
WHEN MATCHED THEN
UPDATE SET series_id = (t.series_id * 0.123)
WHEN NOT MATCHED THEN
INSERT VALUES ('2021-11-01 00:00:05'::timestamp with time zone, 5, 210, '2021-11-01 00:00:05'::timestamp with time zone);
ERROR: The MERGE command with UPDATE/DELETE merge actions is not support on compressed hypertables
-- Merge DELETE/INSERT on compressed hypertables should report error
MERGE INTO target t
USING source s
ON t.value = s.value AND t.series_id = s.series_id
WHEN MATCHED THEN
DELETE
WHEN NOT MATCHED THEN
INSERT VALUES ('2021-11-01 00:00:05'::timestamp with time zone, 5, 210, '2021-11-01 00:00:05'::timestamp with time zone);
ERROR: The MERGE command with UPDATE/DELETE merge actions is not support on compressed hypertables
\set ON_ERROR_STOP 1
-- total compressed chunks
SELECT count(*) AS "total compressed_chunks", is_compressed FROM timescaledb_information.chunks WHERE
hypertable_name = 'target' GROUP BY is_compressed;
total compressed_chunks | is_compressed
-------------------------+---------------
4 | t
(1 row)
-- Merge INSERT on compressed hypertables should work
MERGE INTO target t
USING source s
ON t.partition_column = s.time AND t.value = s.value
WHEN NOT MATCHED THEN
INSERT VALUES ('2021-11-01 00:00:05'::timestamp with time zone, 5, 210, '2021-11-01 00:00:05'::timestamp with time zone);
-- you should notice 1 uncompressed chunk
SELECT count(*) AS "total compressed_chunks", is_compressed FROM timescaledb_information.chunks WHERE
hypertable_name = 'target' GROUP BY is_compressed;
total compressed_chunks | is_compressed
-------------------------+---------------
1 | f
4 | t
(2 rows)
DROP TABLE target;
DROP TABLE source;