mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-28 01:30:29 +08:00
PG13 introduced an option to DROP DATABASE statement to terminate all existing connections to the target database. Now that our minor supported version is PG13 make sense to use it on regression tests in order to avoid potential flaky tests.
93 lines
3.7 KiB
SQL
93 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.
|
|
|
|
\c :TEST_DBNAME :ROLE_CLUSTER_SUPERUSER;
|
|
|
|
\set DATA_NODE_1 :TEST_DBNAME _1
|
|
\set DATA_NODE_2 :TEST_DBNAME _2
|
|
\set DATA_NODE_3 :TEST_DBNAME _3
|
|
|
|
\set TEST_BASE_NAME data_fetcher
|
|
SELECT format('include/%s_run.sql', :'TEST_BASE_NAME') as "TEST_QUERY_NAME",
|
|
format('%s/results/%s_results_cursor.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_CURSOR",
|
|
format('%s/results/%s_results_copy.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_COPY",
|
|
format('%s/results/%s_results_prepared.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_PREPARED"
|
|
\gset
|
|
|
|
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;
|
|
|
|
CREATE TABLE disttable(time timestamptz NOT NULL, device int, temp float);
|
|
SELECT * FROM create_distributed_hypertable('disttable', 'time', 'device', 3);
|
|
|
|
SELECT setseed(1);
|
|
INSERT INTO disttable
|
|
SELECT t, (abs(timestamp_hash(t::timestamp)) % 10) + 1, random() * 10
|
|
FROM generate_series('2019-01-01'::timestamptz, '2019-01-02'::timestamptz, '1 second') as t;
|
|
|
|
-- This table contains the content for precisely one batch of the copy fetcher. The fetch_size
|
|
-- will be set to 100 below and this table contains 99 tuples and the last element on the first
|
|
-- copy batch is the file trailer (#5323).
|
|
CREATE table one_batch(ts timestamptz NOT NULL, sensor_id int NOT NULL, value float NOT NULL);
|
|
SELECT create_distributed_hypertable('one_batch', 'ts');
|
|
INSERT INTO one_batch SELECT '2023-01-01'::timestamptz AS time, sensor_id, random() AS value FROM generate_series(1, 99, 1) AS g1(sensor_id) ORDER BY time;
|
|
|
|
-- Same but for the DEFAULT_FDW_FETCH_SIZE (10000)
|
|
CREATE table one_batch_default(ts timestamptz NOT NULL, sensor_id int NOT NULL, value float NOT NULL);
|
|
SELECT create_distributed_hypertable('one_batch_default', 'ts');
|
|
INSERT INTO one_batch_default SELECT '2023-01-01'::timestamptz AS time, sensor_id, random() AS value FROM generate_series(1, 9999, 1) AS g1(sensor_id) ORDER BY time;
|
|
|
|
SET client_min_messages TO error;
|
|
|
|
-- Set a smaller fetch size to ensure that the result is split into
|
|
-- mutliple batches.
|
|
ALTER FOREIGN DATA WRAPPER timescaledb_fdw OPTIONS (ADD fetch_size '100');
|
|
|
|
-- run the queries using COPY fetcher
|
|
SET timescaledb.remote_data_fetcher = 'copy';
|
|
\set ON_ERROR_STOP 0
|
|
\o :TEST_RESULTS_COPY
|
|
\ir :TEST_QUERY_NAME
|
|
\o
|
|
\set ON_ERROR_STOP 1
|
|
|
|
-- run queries using cursor fetcher
|
|
SET timescaledb.remote_data_fetcher = 'cursor';
|
|
\o :TEST_RESULTS_CURSOR
|
|
\ir :TEST_QUERY_NAME
|
|
\o
|
|
-- compare results
|
|
SELECT format('\! diff %s %s', :'TEST_RESULTS_CURSOR', :'TEST_RESULTS_COPY') as "DIFF_CMD"
|
|
\gset
|
|
:DIFF_CMD
|
|
|
|
-- run queries using prepares statement fetcher
|
|
SET timescaledb.remote_data_fetcher = 'prepared';
|
|
\o :TEST_RESULTS_PREPARED
|
|
\ir :TEST_QUERY_NAME
|
|
\o
|
|
-- compare results
|
|
SELECT format('\! diff %s %s', :'TEST_RESULTS_CURSOR', :'TEST_RESULTS_PREPARED') as "DIFF_CMD"
|
|
\gset
|
|
:DIFF_CMD
|
|
|
|
-- Test custom FDW settings. Instead of the tests above, we are not interersted
|
|
-- in comparing the results of the fetchers. In the following tests we are
|
|
-- interested in the actual outputs (e.g., costs). It's enough to only test them
|
|
-- with one type of fetcher, because it doesn't influence the costs.
|
|
ANALYZE one_batch;
|
|
|
|
SET timescaledb.remote_data_fetcher = 'copy';
|
|
\ir include/data_fetcher_fdw_settings.sql
|
|
|
|
RESET ROLE;
|
|
DROP DATABASE :DATA_NODE_1 WITH (FORCE);
|
|
DROP DATABASE :DATA_NODE_2 WITH (FORCE);
|
|
DROP DATABASE :DATA_NODE_3 WITH (FORCE);
|
|
|