mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-26 08:41:09 +08:00
Don't include the used database ports into test output as this will lead to failing tests when running against a local instance or against a preconfigured cloud instance.
106 lines
3.7 KiB
SQL
106 lines
3.7 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.
|
|
|
|
-- Need to be super user to create extension and add data nodes
|
|
\c :TEST_DBNAME :ROLE_CLUSTER_SUPERUSER;
|
|
\ir include/remote_exec.sql
|
|
|
|
SET ROLE :ROLE_1;
|
|
\set TEST_TABLE 'conditions'
|
|
\ir 'include/aggregate_table_create.sql'
|
|
|
|
SET ROLE :ROLE_CLUSTER_SUPERUSER;
|
|
\set DATA_NODE_1 :TEST_DBNAME _1
|
|
\set DATA_NODE_2 :TEST_DBNAME _2
|
|
\set DATA_NODE_3 :TEST_DBNAME _3
|
|
|
|
-- Add data nodes using the TimescaleDB node management API
|
|
SELECT node_name, database, node_created, database_created, extension_created
|
|
FROM (
|
|
SELECT (add_data_node(name, host => 'localhost', DATABASE => name)).*
|
|
FROM (VALUES (:'DATA_NODE_1'), (:'DATA_NODE_2'), (:'DATA_NODE_3')) v(name)
|
|
) a;
|
|
GRANT USAGE ON FOREIGN SERVER :DATA_NODE_1, :DATA_NODE_2, :DATA_NODE_3 TO :ROLE_1;
|
|
|
|
SELECT * FROM test.remote_exec('{ db_dist_partial_agg_1, db_dist_partial_agg_2, db_dist_partial_agg_3}',
|
|
$$
|
|
CREATE TYPE custom_type AS (high int, low int);
|
|
$$);
|
|
|
|
SET ROLE :ROLE_1;
|
|
SELECT table_name FROM create_distributed_hypertable( 'conditions', 'timec', 'location', 3, chunk_time_interval => INTERVAL '1 day');
|
|
|
|
-- We need a lot of data and a lot of chunks to make the planner push down all of the aggregates
|
|
\ir 'include/aggregate_table_populate.sql'
|
|
|
|
SET enable_partitionwise_aggregate = ON;
|
|
SET timescaledb.remote_data_fetcher = 'cursor';
|
|
|
|
-- Run an explain on the aggregate queries to make sure expected aggregates are being pushed down.
|
|
-- Grouping by the paritioning column should result in full aggregate pushdown where possible,
|
|
-- while using a non-partitioning column should result in a partial pushdown
|
|
\set PREFIX 'EXPLAIN (VERBOSE, COSTS OFF)'
|
|
|
|
\set GROUPING 'location'
|
|
\ir 'include/aggregate_queries.sql'
|
|
|
|
\set GROUPING 'region, temperature'
|
|
\ir 'include/aggregate_queries.sql'
|
|
|
|
-- Full aggregate pushdown correctness check, compare location grouped query results with partionwise aggregates on and off
|
|
\set GROUPING 'location'
|
|
SELECT format('%s/results/dist_agg_loc_results_test.out', :'TEST_OUTPUT_DIR') as "RESULTS_TEST1",
|
|
format('%s/results/dist_agg_loc_results_control.out', :'TEST_OUTPUT_DIR') as "RESULTS_CONTROL1"
|
|
\gset
|
|
SELECT format('\! diff %s %s', :'RESULTS_CONTROL1', :'RESULTS_TEST1') as "DIFF_CMD1"
|
|
\gset
|
|
|
|
--generate the results into two different files
|
|
\set ECHO errors
|
|
SET client_min_messages TO error;
|
|
--make output contain query results
|
|
\set PREFIX ''
|
|
\o :RESULTS_CONTROL1
|
|
SET enable_partitionwise_aggregate = OFF;
|
|
\ir 'include/aggregate_queries.sql'
|
|
\o
|
|
\o :RESULTS_TEST1
|
|
SET enable_partitionwise_aggregate = ON;
|
|
\ir 'include/aggregate_queries.sql'
|
|
\o
|
|
\set ECHO all
|
|
|
|
:DIFF_CMD1
|
|
|
|
-- Partial aggregate pushdown correctness check, compare region grouped query results with partionwise aggregates on and off
|
|
\set GROUPING 'region'
|
|
SELECT format('%s/results/dist_agg_region_results_test.out', :'TEST_OUTPUT_DIR') as "RESULTS_TEST2",
|
|
format('%s/results/dist_agg_region_results_control.out', :'TEST_OUTPUT_DIR') as "RESULTS_CONTROL2"
|
|
\gset
|
|
SELECT format('\! diff %s %s', :'RESULTS_CONTROL2', :'RESULTS_TEST2') as "DIFF_CMD2"
|
|
\gset
|
|
|
|
--generate the results into two different files
|
|
\set ECHO errors
|
|
SET client_min_messages TO error;
|
|
--make output contain query results
|
|
\set PREFIX ''
|
|
\o :RESULTS_CONTROL2
|
|
SET enable_partitionwise_aggregate = OFF;
|
|
\ir 'include/aggregate_queries.sql'
|
|
\o
|
|
\o :RESULTS_TEST2
|
|
SET enable_partitionwise_aggregate = ON;
|
|
CALL distributed_exec($$ SET enable_partitionwise_aggregate = ON $$);
|
|
\ir 'include/aggregate_queries.sql'
|
|
\o
|
|
\set ECHO all
|
|
|
|
:DIFF_CMD2
|
|
|
|
\c :TEST_DBNAME :ROLE_CLUSTER_SUPERUSER
|
|
DROP DATABASE :DATA_NODE_1;
|
|
DROP DATABASE :DATA_NODE_2;
|
|
DROP DATABASE :DATA_NODE_3;
|