mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-28 01:30:29 +08:00
Dont construct chunk names from internal catalog tables in tests but instead use show_chunks and the informational views.
113 lines
4.6 KiB
Plaintext
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;
|