mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 10:33:27 +08:00
When the targetlist of a ChunkAppend node was modified after plan creation the ChunkAppend node would not properly project because input and output targetlist where pointing to the same list, so any modification to the output targetlist would carry over to the input targetlist. This patch decouples input targetlist from output targetlist to prevent this from happening.
98 lines
3.8 KiB
PL/PgSQL
98 lines
3.8 KiB
PL/PgSQL
-- 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.
|
|
|
|
-- create a now() function for repeatable testing that always returns
|
|
-- the same timestamp. It needs to be marked STABLE
|
|
CREATE OR REPLACE FUNCTION now_s()
|
|
RETURNS timestamptz LANGUAGE PLPGSQL STABLE AS
|
|
$BODY$
|
|
BEGIN
|
|
RAISE NOTICE 'Stable function now_s() called!';
|
|
RETURN '2017-08-22T10:00:00'::timestamptz;
|
|
END;
|
|
$BODY$;
|
|
|
|
CREATE OR REPLACE FUNCTION now_i()
|
|
RETURNS timestamptz LANGUAGE PLPGSQL IMMUTABLE AS
|
|
$BODY$
|
|
BEGIN
|
|
RAISE NOTICE 'Immutable function now_i() called!';
|
|
RETURN '2017-08-22T10:00:00'::timestamptz;
|
|
END;
|
|
$BODY$;
|
|
|
|
CREATE OR REPLACE FUNCTION now_v()
|
|
RETURNS timestamptz LANGUAGE PLPGSQL VOLATILE AS
|
|
$BODY$
|
|
BEGIN
|
|
RAISE NOTICE 'Volatile function now_v() called!';
|
|
RETURN '2017-08-22T10:00:00'::timestamptz;
|
|
END;
|
|
$BODY$;
|
|
|
|
CREATE TABLE append_test(time timestamptz, temp float, colorid integer);
|
|
SELECT create_hypertable('append_test', 'time', chunk_time_interval => 2628000000000);
|
|
|
|
-- create three chunks
|
|
INSERT INTO append_test VALUES ('2017-03-22T09:18:22', 23.5, 1),
|
|
('2017-03-22T09:18:23', 21.5, 1),
|
|
('2017-05-22T09:18:22', 36.2, 2),
|
|
('2017-05-22T09:18:23', 15.2, 2),
|
|
('2017-08-22T09:18:22', 34.1, 3);
|
|
|
|
-- Create another hypertable to join with
|
|
CREATE TABLE join_test(time timestamptz, temp float, colorid integer);
|
|
SELECT create_hypertable('join_test', 'time', chunk_time_interval => 2628000000000);
|
|
|
|
INSERT INTO join_test VALUES ('2017-01-22T09:18:22', 15.2, 1),
|
|
('2017-02-22T09:18:22', 24.5, 2),
|
|
('2017-08-22T09:18:22', 23.1, 3);
|
|
|
|
-- create hypertable with DATE time dimension
|
|
CREATE TABLE metrics_date(time DATE NOT NULL);
|
|
SELECT create_hypertable('metrics_date','time');
|
|
INSERT INTO metrics_date SELECT generate_series('2000-01-01'::date, '2000-02-01'::date, '5m'::interval);
|
|
ANALYZE metrics_date;
|
|
|
|
-- create hypertable with TIMESTAMP time dimension
|
|
CREATE TABLE metrics_timestamp(time TIMESTAMP NOT NULL);
|
|
SELECT create_hypertable('metrics_timestamp','time');
|
|
INSERT INTO metrics_timestamp SELECT generate_series('2000-01-01'::date, '2000-02-01'::date, '5m'::interval);
|
|
ANALYZE metrics_timestamp;
|
|
|
|
-- create hypertable with TIMESTAMPTZ time dimension
|
|
CREATE TABLE metrics_timestamptz(time TIMESTAMPTZ NOT NULL, device_id INT NOT NULL);
|
|
CREATE INDEX ON metrics_timestamptz(device_id,time);
|
|
SELECT create_hypertable('metrics_timestamptz','time');
|
|
INSERT INTO metrics_timestamptz SELECT generate_series('2000-01-01'::date, '2000-02-01'::date, '5m'::interval), 1;
|
|
INSERT INTO metrics_timestamptz SELECT generate_series('2000-01-01'::date, '2000-02-01'::date, '5m'::interval), 2;
|
|
INSERT INTO metrics_timestamptz SELECT generate_series('2000-01-01'::date, '2000-02-01'::date, '5m'::interval), 3;
|
|
ANALYZE metrics_timestamptz;
|
|
|
|
-- create space partitioned hypertable
|
|
CREATE TABLE metrics_space(time timestamptz NOT NULL, device_id int NOT NULL, v1 float, v2 float, v3 text);
|
|
SELECT create_hypertable('metrics_space','time','device_id',3);
|
|
|
|
INSERT INTO metrics_space
|
|
SELECT time, device_id, device_id + 0.25, device_id + 0.75, device_id
|
|
FROM generate_series('2000-01-01'::timestamptz, '2000-01-14'::timestamptz, '5m'::interval) g1(time),
|
|
generate_series(1,10,1) g2(device_id)
|
|
ORDER BY time, device_id;
|
|
|
|
ANALYZE metrics_space;
|
|
|
|
-- test ChunkAppend projection #2661
|
|
CREATE TABLE i2661 (
|
|
machine_id int4 NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
"timestamp" timestamptz NOT NULL,
|
|
"first" float4 NULL
|
|
);
|
|
SELECT create_hypertable('i2661', 'timestamp');
|
|
|
|
INSERT INTO i2661 SELECT 1, 'speed', generate_series('2019-12-31 00:00:00', '2020-01-10 00:00:00', '2m'::interval), 0;
|
|
ANALYZE i2661;
|
|
|
|
|