mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
So far, the ts_bookend_deserializefunc() function has allocated the deserialized data in the current memory context. This data could be removed before the aggregation is finished. This patch moves the data into the aggregation memory context.
52 lines
2.2 KiB
SQL
52 lines
2.2 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
\set TEST_BASE_NAME agg_bookends
|
|
SELECT format('include/%s_load.sql', :'TEST_BASE_NAME') as "TEST_LOAD_NAME",
|
|
format('include/%s_query.sql', :'TEST_BASE_NAME') as "TEST_QUERY_NAME",
|
|
format('%s/results/%s_results_optimized.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_OPTIMIZED",
|
|
format('%s/results/%s_results_unoptimized.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_UNOPTIMIZED"
|
|
\gset
|
|
SELECT format('\! diff -u --label "Unoptimized result" --label "Optimized result" %s %s', :'TEST_RESULTS_UNOPTIMIZED', :'TEST_RESULTS_OPTIMIZED') as "DIFF_CMD"
|
|
\gset
|
|
|
|
\set PREFIX 'EXPLAIN (analyze, costs off, timing off, summary off)'
|
|
\ir :TEST_LOAD_NAME
|
|
\ir :TEST_QUERY_NAME
|
|
|
|
-- we want test results as part of the output too to make sure we produce correct output
|
|
\set PREFIX ''
|
|
\ir :TEST_QUERY_NAME
|
|
|
|
-- diff results with optimizations disabled and enabled
|
|
\o :TEST_RESULTS_UNOPTIMIZED
|
|
SET timescaledb.enable_optimizations TO false;
|
|
\ir :TEST_QUERY_NAME
|
|
\o
|
|
|
|
\o :TEST_RESULTS_OPTIMIZED
|
|
SET timescaledb.enable_optimizations TO true;
|
|
\ir :TEST_QUERY_NAME
|
|
\o
|
|
|
|
:DIFF_CMD
|
|
|
|
-- Test partial aggregation
|
|
CREATE TABLE partial_aggregation (time timestamptz NOT NULL, quantity numeric, longvalue text);
|
|
SELECT schema_name, table_name, created FROM create_hypertable('partial_aggregation', 'time');
|
|
|
|
INSERT INTO partial_aggregation VALUES('2018-01-20T09:00:43', NULL, NULL);
|
|
INSERT INTO partial_aggregation VALUES('2018-01-20T09:00:43', NULL, NULL);
|
|
INSERT INTO partial_aggregation VALUES('2019-01-20T09:00:43', 1, 'Hello');
|
|
INSERT INTO partial_aggregation VALUES('2019-01-20T09:00:43', 2, 'World');
|
|
|
|
-- Use enable_partitionwise_aggregate to create partial aggregates per chunk
|
|
SET enable_partitionwise_aggregate = ON;
|
|
SELECT first(time, quantity) FROM partial_aggregation;
|
|
SELECT last(time, quantity) FROM partial_aggregation;
|
|
SELECT first(longvalue, quantity) FROM partial_aggregation;
|
|
SELECT last(longvalue, quantity) FROM partial_aggregation;
|
|
SET enable_partitionwise_aggregate = OFF;
|
|
|