mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-24 23:34:25 +08:00
90 lines
3.9 KiB
SQL
90 lines
3.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.
|
|
|
|
create table vectorqual(metric1 int8, ts timestamp, metric2 int8, device int8);
|
|
select create_hypertable('vectorqual', 'ts');
|
|
alter table vectorqual set (timescaledb.compress, timescaledb.compress_segmentby = 'device');
|
|
|
|
insert into vectorqual(ts, device, metric1, metric2) values ('2020-01-01 00:00:00', 1, 11, 12);
|
|
select count(compress_chunk(x, true)) from show_chunks('vectorqual') x;
|
|
|
|
alter table vectorqual drop column metric1;
|
|
insert into vectorqual(ts, device, metric2) values ('2021-01-01 00:00:00', 2, 22);
|
|
select count(compress_chunk(x, true)) from show_chunks('vectorqual') x;
|
|
|
|
alter table vectorqual add column metric3 int4 default 777;
|
|
insert into vectorqual(ts, device, metric2, metric3) values ('2022-01-01 00:00:00', 3, 32, 33);
|
|
select count(compress_chunk(x, true)) from show_chunks('vectorqual') x;
|
|
|
|
alter table vectorqual add column metric4 int8;
|
|
insert into vectorqual(ts, device, metric2, metric3, metric4) values ('2023-01-01 00:00:00', 4, 42, 43, 44);
|
|
select count(compress_chunk(x, true)) from show_chunks('vectorqual') x;
|
|
|
|
select * from vectorqual order by vectorqual;
|
|
|
|
set timescaledb.debug_require_vector_qual to 'only' /* all following quals must be vectorized */;
|
|
select count(*) from vectorqual where ts > '1999-01-01 00:00:00';
|
|
select count(*) from vectorqual where metric2 = 22;
|
|
select count(*) from vectorqual where 22 = metric2 /* commutators */;
|
|
select count(*) from vectorqual where metric3 = 33;
|
|
select count(*) from vectorqual where metric3 = 777 /* default value */;
|
|
select count(*) from vectorqual where metric4 = 44 /* column with default null */;
|
|
select count(*) from vectorqual where metric4 >= 0 /* nulls shouldn't pass the qual */;
|
|
|
|
set timescaledb.debug_require_vector_qual to 'forbid';
|
|
select count(*) from vectorqual where device = 1 /* can't apply vector ops to the segmentby column */;
|
|
|
|
-- Test columns that don't support bulk decompression.
|
|
alter table vectorqual add column tag text;
|
|
insert into vectorqual(ts, device, metric2, metric3, metric4, tag) values ('2025-01-01 00:00:00', 5, 52, 53, 54, 'tag5');
|
|
select count(compress_chunk(x, true)) from show_chunks('vectorqual') x;
|
|
|
|
set timescaledb.debug_require_vector_qual to 'only';
|
|
select tag from vectorqual where metric2 > 0;
|
|
|
|
|
|
-- Queries without aggregation.
|
|
select * from vectorqual where ts > '2021-01-01 00:00:00' order by vectorqual;
|
|
select * from vectorqual where metric4 >= 0 order by vectorqual;
|
|
|
|
|
|
-- Constraints on columns not selected.
|
|
select metric4 from vectorqual where ts > '2021-01-01 00:00:00' order by 1;
|
|
|
|
|
|
-- ANDed constraints on multiple columns.
|
|
select * from vectorqual where ts > '2021-01-01 00:00:00' and metric3 > 40 order by vectorqual;
|
|
|
|
|
|
-- ORed constrainst on multiple columns (not vectorized for now).
|
|
set timescaledb.debug_require_vector_qual to 'forbid';
|
|
select * from vectorqual where ts > '2021-01-01 00:00:00' or metric3 > 40 order by vectorqual;
|
|
|
|
|
|
-- Test with unary operator.
|
|
create operator !! (function = 'bool', rightarg = int4);
|
|
select count(*) from vectorqual where !!metric3;
|
|
|
|
|
|
-- NullTest is not vectorized.
|
|
set timescaledb.debug_require_vector_qual to 'forbid';
|
|
select count(*) from vectorqual where metric4 is null;
|
|
select count(*) from vectorqual where metric4 is not null;
|
|
|
|
|
|
-- Test that the vectorized quals are disabled by disabling the bulk decompression.
|
|
set timescaledb.enable_bulk_decompression to off;
|
|
set timescaledb.debug_require_vector_qual to 'forbid';
|
|
select count(*) from vectorqual where metric4 > null;
|
|
set timescaledb.enable_bulk_decompression to on;
|
|
|
|
|
|
-- Test that the debug GUC works
|
|
\set ON_ERROR_STOP 0
|
|
set timescaledb.debug_require_vector_qual to 'forbid';
|
|
select count(*) from vectorqual where metric4 > 4;
|
|
set timescaledb.debug_require_vector_qual to 'only';
|
|
select count(*) from vectorqual where metric4 is null;
|
|
\set ON_ERROR_STOP 1
|