mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-25 15:50:27 +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.
86 lines
3.0 KiB
SQL
86 lines
3.0 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.
|
|
|
|
\ir debugsupport.sql
|
|
|
|
\set DATA_NODE_1 :TEST_DBNAME _1
|
|
\set DATA_NODE_2 :TEST_DBNAME _2
|
|
\set DATA_NODE_3 :TEST_DBNAME _3
|
|
|
|
-- Add data nodes
|
|
SET ROLE :ROLE_CLUSTER_SUPERUSER;
|
|
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;
|
|
|
|
SET ROLE :ROLE_1;
|
|
|
|
-- Create a "normal" PG table as reference, one two-dimensional
|
|
-- distributed hypertable, and a one-dimensional distributed
|
|
-- hypertable
|
|
CREATE TABLE reference (time timestamptz NOT NULL, device int, location int, temp float);
|
|
CREATE TABLE hyper (LIKE reference);
|
|
CREATE TABLE hyper1d (LIKE reference);
|
|
SELECT create_distributed_hypertable('hyper', 'time', 'device', 3,
|
|
chunk_time_interval => interval '18 hours');
|
|
|
|
SELECT create_distributed_hypertable('hyper1d', 'time', chunk_time_interval => interval '36 hours');
|
|
|
|
SELECT setseed(1);
|
|
INSERT INTO reference
|
|
SELECT t, (abs(timestamp_hash(t::timestamp)) % 10) + 1, (random() * 20)::int, random() * 80
|
|
FROM generate_series('2019-01-01'::timestamptz, '2019-01-04'::timestamptz, '1 minute') as t;
|
|
|
|
-- Insert the same data into the hypertable but repartition the data
|
|
-- set so that we can test the "safeness" of some push-downs across
|
|
-- the repartitioning boundary.
|
|
|
|
INSERT INTO hyper
|
|
SELECT * FROM reference
|
|
WHERE time < '2019-01-02 05:10'::timestamptz
|
|
ORDER BY time;
|
|
SELECT * FROM set_number_partitions('hyper', 2);
|
|
INSERT INTO hyper
|
|
SELECT * FROM reference
|
|
WHERE time >= '2019-01-02 05:10'::timestamptz
|
|
AND time < '2019-01-03 01:22'::timestamptz
|
|
ORDER BY time;
|
|
SELECT * FROM set_number_partitions('hyper', 5);
|
|
INSERT INTO hyper
|
|
SELECT * FROM reference
|
|
WHERE time >= '2019-01-03 01:22'::timestamptz
|
|
ORDER BY time;
|
|
|
|
INSERT INTO hyper1d
|
|
SELECT * FROM reference ORDER BY time;
|
|
|
|
SELECT d.hypertable_id, d.id, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.dimension d, _timescaledb_catalog.dimension_slice ds
|
|
WHERE num_slices IS NOT NULL
|
|
AND d.id = ds.dimension_id
|
|
ORDER BY 1, 2, 3, 4;
|
|
|
|
-- Set the max time we can query without hitting the repartitioned
|
|
-- chunks. Note that this is before the given repartitioning time
|
|
-- above because chunk boundaries do not align exactly with the given
|
|
-- timestamp
|
|
\set REPARTITIONED_TIME_RANGE 'time >= ''2019-01-01'''
|
|
\set CLEAN_PARTITIONING_TIME_RANGE 'time BETWEEN ''2019-01-01'' AND ''2019-01-01 15:00'''
|
|
|
|
|
|
-- Custom agg func for push down tests
|
|
CREATE AGGREGATE custom_sum(int4) (
|
|
SFUNC = int4_sum,
|
|
STYPE = int8
|
|
);
|
|
|
|
-- Set seed on all data nodes for ANALYZE to sample consistently
|
|
CALL distributed_exec($$ SELECT setseed(1); $$);
|
|
ANALYZE reference;
|
|
ANALYZE hyper;
|
|
ANALYZE hyper1d;
|