mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 01:53:41 +08:00
Changing from using the `compress_using` parameter with a table access method name to use the boolean parameter `hypercore_use_access_method` instead to avoid having to provide a name when using the table access method for compression.
84 lines
2.9 KiB
SQL
84 lines
2.9 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.
|
|
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER;
|
|
|
|
\ir include/setup_hypercore.sql
|
|
|
|
-- Disable merge and hash join to avoid flaky test.
|
|
set enable_mergejoin to false;
|
|
set enable_hashjoin to false;
|
|
|
|
-- There are already tests to merge into uncompressed tables, so just
|
|
-- compress all chunks using Hypercore.
|
|
select compress_chunk(show_chunks(:'hypertable'), hypercore_use_access_method => true);
|
|
|
|
create table source_data (
|
|
created_at timestamptz not null,
|
|
location_id smallint,
|
|
device_id bigint,
|
|
temp float8,
|
|
humidity float4
|
|
);
|
|
|
|
INSERT INTO source_data(created_at, location_id, device_id, temp, humidity)
|
|
VALUES ('2022-06-01 00:00:00', 1, 1, 1.0, 1.0),
|
|
('2022-06-01 00:00:02', 1, 1, 1.0, 1.0),
|
|
('2022-06-01 00:00:03', 1, 1, 1.0, 1.0);
|
|
|
|
-- TODO(timescale/timescaledb-private#1170) Compression does not
|
|
-- support UPDATE and DELETE actions for MERGE command.
|
|
\set ON_ERROR_STOP 0
|
|
merge into :hypertable ht
|
|
using source_data sd on ht.created_at = sd.created_at
|
|
when matched then update set humidity = ht.humidity + sd.humidity;
|
|
|
|
merge into :hypertable ht
|
|
using source_data sd on ht.created_at = sd.created_at
|
|
when matched then delete;
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- Initially, there should be no uncompressed rows
|
|
\x on
|
|
select * from :hypertable where not _timescaledb_debug.is_compressed_tid(ctid);
|
|
\x off
|
|
|
|
-- Test merging into hypertable. The insert is executed since we use
|
|
-- ANALYZE, so we should see the number of arrays decompressed.
|
|
select explain_analyze_anonymize(format($$
|
|
merge into %s ht
|
|
using source_data sd on ht.created_at = sd.created_at
|
|
when not matched then
|
|
insert (created_at, location_id, device_id, temp, humidity)
|
|
values (created_at, location_id, device_id, temp, humidity)
|
|
$$, :'hypertable'));
|
|
|
|
-- Now, the inserted rows should show up, but not the ones that
|
|
-- already exist.
|
|
\x on
|
|
select * from :hypertable where not _timescaledb_debug.is_compressed_tid(ctid);
|
|
\x off
|
|
|
|
-- Recompress all and try to insert the same rows again. This there
|
|
-- should be no rows inserted.
|
|
select compress_chunk(show_chunks(:'hypertable'), hypercore_use_access_method => true);
|
|
|
|
\x on
|
|
select * from :hypertable where not _timescaledb_debug.is_compressed_tid(ctid);
|
|
\x off
|
|
|
|
-- Test merging into hypertable. The insert is executed since we use
|
|
-- ANALYZE, so we should see the number of arrays decompressed.
|
|
select explain_analyze_anonymize(format($$
|
|
merge into %s ht
|
|
using source_data sd on ht.created_at = sd.created_at
|
|
when not matched then
|
|
insert (created_at, location_id, device_id, temp, humidity)
|
|
values (created_at, location_id, device_id, temp, humidity)
|
|
$$, :'hypertable'));
|
|
|
|
\x on
|
|
select * from :hypertable where not _timescaledb_debug.is_compressed_tid(ctid);
|
|
\x off
|