mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 02:53:51 +08:00
This patch fixes the result sorting in tests that had no ORDER BY clause or where ORDER BY clause did not result in fixed ordering.
124 lines
5.2 KiB
SQL
124 lines
5.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.
|
|
|
|
--
|
|
-- This test will create chunks in two dimenisions, time (x) and
|
|
-- space (y), where the time dimension is aligned. The figure below
|
|
-- shows the expected result. The chunk number in the figure
|
|
-- indicates the creation order.
|
|
--
|
|
-- +
|
|
-- +
|
|
-- + +-----+ +-----+
|
|
-- + | 2 | | 3 |
|
|
-- + | +---+-+ |
|
|
-- + +-----+ 5 |6+-----+
|
|
-- + | 1 +---+-+-----+ +---------+
|
|
-- + | | |4| 7 | | 8 |
|
|
-- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|
|
-- 0 5 10 15 20
|
|
--
|
|
-- Partitioning:
|
|
--
|
|
-- Chunk # | time | space
|
|
-- 1 | 3 | 2
|
|
-- 4 | 1 | 3
|
|
-- 5 | 5 | 3
|
|
--
|
|
|
|
CREATE TABLE chunk_test(time integer, temp float8, tag integer, color integer);
|
|
|
|
SELECT create_hypertable('chunk_test', 'time', 'tag', 2, chunk_time_interval => 3);
|
|
|
|
INSERT INTO chunk_test VALUES (4, 24.3, 1, 1);
|
|
|
|
SELECT * FROM _timescaledb_catalog.dimension_slice;
|
|
|
|
INSERT INTO chunk_test VALUES (4, 24.3, 2, 1);
|
|
INSERT INTO chunk_test VALUES (10, 24.3, 2, 1);
|
|
|
|
SELECT c.table_name AS chunk_name, d.id AS dimension_id, ds.id AS slice_id, range_start, range_end FROM _timescaledb_catalog.chunk c
|
|
LEFT JOIN _timescaledb_catalog.chunk_constraint cc ON (c.id = cc.chunk_id)
|
|
LEFT JOIN _timescaledb_catalog.dimension_slice ds ON (ds.id = cc.dimension_slice_id)
|
|
LEFT JOIN _timescaledb_catalog.dimension d ON (d.id = ds.dimension_id)
|
|
LEFT JOIN _timescaledb_catalog.hypertable h ON (d.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_test'
|
|
ORDER BY c.id, d.id;
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
SELECT set_number_partitions('chunk_test', 3);
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
|
|
SELECT set_chunk_time_interval('chunk_test', 1::bigint);
|
|
|
|
INSERT INTO chunk_test VALUES (8, 24.3, 11233, 1);
|
|
|
|
SELECT set_chunk_time_interval('chunk_test', 5::bigint);
|
|
|
|
SELECT * FROM _timescaledb_catalog.dimension;
|
|
INSERT INTO chunk_test VALUES (7, 24.3, 79669, 1);
|
|
INSERT INTO chunk_test VALUES (8, 24.3, 79669, 1);
|
|
INSERT INTO chunk_test VALUES (10, 24.3, 11233, 1);
|
|
INSERT INTO chunk_test VALUES (16, 24.3, 11233, 1);
|
|
|
|
SELECT c.table_name AS chunk_name, d.id AS dimension_id, ds.id AS slice_id, range_start, range_end FROM _timescaledb_catalog.chunk c
|
|
LEFT JOIN _timescaledb_catalog.chunk_constraint cc ON (c.id = cc.chunk_id)
|
|
LEFT JOIN _timescaledb_catalog.dimension_slice ds ON (ds.id = cc.dimension_slice_id)
|
|
LEFT JOIN _timescaledb_catalog.dimension d ON (d.id = ds.dimension_id)
|
|
LEFT JOIN _timescaledb_catalog.hypertable h ON (d.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_test'
|
|
ORDER BY c.id, d.id;
|
|
|
|
|
|
--test the edges of an open partition -- INT_64_MAX and INT_64_MIN.
|
|
CREATE TABLE chunk_test_ends(time bigint, temp float8, tag integer, color integer);
|
|
SELECT create_hypertable('chunk_test_ends', 'time', chunk_time_interval => 5);
|
|
|
|
INSERT INTO chunk_test_ends VALUES ((-9223372036854775808)::bigint, 23.1, 11233, 1);
|
|
INSERT INTO chunk_test_ends VALUES (9223372036854775807::bigint, 24.1, 11233, 1);
|
|
|
|
--try to hit cache
|
|
INSERT INTO chunk_test_ends VALUES (9223372036854775807::bigint, 24.2, 11233, 1);
|
|
INSERT INTO chunk_test_ends VALUES (9223372036854775807::bigint, 24.3, 11233, 1), (9223372036854775807::bigint, 24.4, 11233, 1);
|
|
|
|
INSERT INTO chunk_test_ends VALUES ((-9223372036854775808)::bigint, 23.2, 11233, 1);
|
|
INSERT INTO chunk_test_ends VALUES ((-9223372036854775808)::bigint, 23.3, 11233, 1), ((-9223372036854775808)::bigint, 23.4, 11233, 1);
|
|
|
|
SELECT * FROM chunk_test_ends ORDER BY time asc, tag, temp;
|
|
|
|
--further tests of set_chunk_time_interval
|
|
CREATE TABLE chunk_test2(time TIMESTAMPTZ, temp float8, tag integer, color integer);
|
|
SELECT create_hypertable('chunk_test2', 'time', 'tag', 2, chunk_time_interval => 3);
|
|
SELECT interval_length
|
|
FROM _timescaledb_catalog.dimension d
|
|
LEFT JOIN _timescaledb_catalog.hypertable h ON (d.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_test2'
|
|
ORDER BY d.id;
|
|
|
|
-- should work since time column is non-INT
|
|
SELECT set_chunk_time_interval('chunk_test2', INTERVAL '1 minute');
|
|
SELECT interval_length
|
|
FROM _timescaledb_catalog.dimension d
|
|
LEFT JOIN _timescaledb_catalog.hypertable h ON (d.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_test2'
|
|
ORDER BY d.id;
|
|
|
|
-- should still work for non-INT time columns
|
|
SELECT set_chunk_time_interval('chunk_test2', 1000000);
|
|
SELECT interval_length
|
|
FROM _timescaledb_catalog.dimension d
|
|
LEFT JOIN _timescaledb_catalog.hypertable h ON (d.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_test2'
|
|
ORDER BY d.id;
|
|
|
|
\set ON_ERROR_STOP 0
|
|
select set_chunk_time_interval(NULL,NULL::interval);
|
|
-- should fail since time column is an int
|
|
SELECT set_chunk_time_interval('chunk_test', INTERVAL '1 minute');
|
|
-- should fail since its not a valid way to represent time
|
|
SELECT set_chunk_time_interval('chunk_test', 'foo'::TEXT);
|
|
SELECT set_chunk_time_interval('chunk_test', NULL::BIGINT);
|
|
SELECT set_chunk_time_interval('chunk_test2', NULL::BIGINT);
|
|
SELECT set_chunk_time_interval('chunk_test2', NULL::INTERVAL);
|
|
\set ON_ERROR_STOP 1
|