mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
This commit gives more visibility into job failures by making the information regarding a job runtime error available in an extension table (`job_errors`) that users can directly query. This commit also adds an infromational view on top of the table for convenience. To prevent the `job_errors` table from growing too large, a retention job is also set up with a default retention interval of 1 month. The retention job is registered with a custom check function that requires that a valid "drop_after" interval be provided in the config field of the job.
1469 lines
76 KiB
Plaintext
1469 lines
76 KiB
Plaintext
-- 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.
|
|
-- Set this variable to avoid using a hard-coded path each time query
|
|
-- results are compared
|
|
\set QUERY_RESULT_TEST_EQUAL_RELPATH 'include/query_result_test_equal.sql'
|
|
CREATE OR REPLACE FUNCTION dimension_get_time(
|
|
hypertable_id INT
|
|
)
|
|
RETURNS _timescaledb_catalog.dimension LANGUAGE SQL STABLE AS
|
|
$BODY$
|
|
SELECT *
|
|
FROM _timescaledb_catalog.dimension d
|
|
WHERE d.hypertable_id = dimension_get_time.hypertable_id AND
|
|
d.interval_length IS NOT NULL
|
|
$BODY$;
|
|
CREATE TABLE PUBLIC.drop_chunk_test1(time bigint, temp float8, device_id text);
|
|
CREATE TABLE PUBLIC.drop_chunk_test2(time bigint, temp float8, device_id text);
|
|
CREATE TABLE PUBLIC.drop_chunk_test3(time bigint, temp float8, device_id text);
|
|
CREATE INDEX ON drop_chunk_test1(time DESC);
|
|
-- show_chunks() without specifying a table is not allowed
|
|
\set ON_ERROR_STOP 0
|
|
SELECT show_chunks(NULL);
|
|
ERROR: invalid hypertable or continuous aggregate
|
|
\set ON_ERROR_STOP 1
|
|
SELECT create_hypertable('public.drop_chunk_test1', 'time', chunk_time_interval => 1, create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
-------------------------------
|
|
(1,public,drop_chunk_test1,t)
|
|
(1 row)
|
|
|
|
SELECT create_hypertable('public.drop_chunk_test2', 'time', chunk_time_interval => 1, create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
-------------------------------
|
|
(2,public,drop_chunk_test2,t)
|
|
(1 row)
|
|
|
|
SELECT create_hypertable('public.drop_chunk_test3', 'time', chunk_time_interval => 1, create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
-------------------------------
|
|
(3,public,drop_chunk_test3,t)
|
|
(1 row)
|
|
|
|
-- Add space dimensions to ensure chunks share dimension slices
|
|
SELECT add_dimension('public.drop_chunk_test1', 'device_id', 2);
|
|
add_dimension
|
|
-----------------------------------------
|
|
(4,public,drop_chunk_test1,device_id,t)
|
|
(1 row)
|
|
|
|
SELECT add_dimension('public.drop_chunk_test2', 'device_id', 2);
|
|
add_dimension
|
|
-----------------------------------------
|
|
(5,public,drop_chunk_test2,device_id,t)
|
|
(1 row)
|
|
|
|
SELECT add_dimension('public.drop_chunk_test3', 'device_id', 2);
|
|
add_dimension
|
|
-----------------------------------------
|
|
(6,public,drop_chunk_test3,device_id,t)
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+--------------+-------------+-------------+-----------
|
|
(0 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
--------+------+------+-------
|
|
(0 rows)
|
|
|
|
SELECT _timescaledb_internal.get_partition_for_key('dev1'::text);
|
|
get_partition_for_key
|
|
-----------------------
|
|
1129986420
|
|
(1 row)
|
|
|
|
SELECT _timescaledb_internal.get_partition_for_key('dev7'::varchar(5));
|
|
get_partition_for_key
|
|
-----------------------
|
|
449729092
|
|
(1 row)
|
|
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(1, 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(2, 2.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(3, 3.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(4, 4.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(5, 5.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test1 VALUES(6, 6.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(1, 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(2, 2.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(3, 3.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(4, 4.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(5, 5.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test2 VALUES(6, 6.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(1, 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(2, 2.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(3, 3.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(4, 4.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(5, 5.0, 'dev7');
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(6, 6.0, 'dev7');
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
1 | 1 | _timescaledb_internal | _hyper_1_1_chunk | 1 | 2
|
|
2 | 1 | _timescaledb_internal | _hyper_1_2_chunk | 2 | 3
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
5 | 1 | _timescaledb_internal | _hyper_1_5_chunk | 5 | 6
|
|
6 | 1 | _timescaledb_internal | _hyper_1_6_chunk | 6 | 7
|
|
7 | 2 | _timescaledb_internal | _hyper_2_7_chunk | 1 | 2
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(12 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_1_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_2_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_5_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_6_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_7_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_13_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_14_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_15_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_16_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_17_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_18_chunk | table | default_perm_user
|
|
(18 rows)
|
|
|
|
-- next two calls of show_chunks should give same set of chunks as above when combined
|
|
SELECT show_chunks('drop_chunk_test1');
|
|
show_chunks
|
|
----------------------------------------
|
|
_timescaledb_internal._hyper_1_1_chunk
|
|
_timescaledb_internal._hyper_1_2_chunk
|
|
_timescaledb_internal._hyper_1_3_chunk
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
_timescaledb_internal._hyper_1_5_chunk
|
|
_timescaledb_internal._hyper_1_6_chunk
|
|
(6 rows)
|
|
|
|
SELECT * FROM show_chunks('drop_chunk_test2');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_2_7_chunk
|
|
_timescaledb_internal._hyper_2_8_chunk
|
|
_timescaledb_internal._hyper_2_9_chunk
|
|
_timescaledb_internal._hyper_2_10_chunk
|
|
_timescaledb_internal._hyper_2_11_chunk
|
|
_timescaledb_internal._hyper_2_12_chunk
|
|
(6 rows)
|
|
|
|
CREATE VIEW dependent_view AS SELECT * FROM _timescaledb_internal._hyper_1_1_chunk;
|
|
\set ON_ERROR_STOP 0
|
|
SELECT drop_chunks('drop_chunk_test1');
|
|
ERROR: invalid time range for dropping chunks
|
|
SELECT drop_chunks('drop_chunk_test1', older_than => 2);
|
|
ERROR: cannot drop table _timescaledb_internal._hyper_1_1_chunk because other objects depend on it
|
|
SELECT drop_chunks('drop_chunk_test1', older_than => NULL::interval);
|
|
ERROR: invalid time range for dropping chunks
|
|
SELECT drop_chunks('drop_chunk_test1', older_than => NULL::int);
|
|
ERROR: invalid time range for dropping chunks
|
|
DROP VIEW dependent_view;
|
|
-- should error because wrong time type
|
|
SELECT drop_chunks('drop_chunk_test1', older_than => now());
|
|
ERROR: invalid time argument type "timestamp with time zone"
|
|
SELECT show_chunks('drop_chunk_test3', now());
|
|
ERROR: invalid time argument type "timestamp with time zone"
|
|
-- should error because of wrong relative order of time constraints
|
|
SELECT show_chunks('drop_chunk_test1', older_than=>3, newer_than=>4);
|
|
ERROR: invalid time range
|
|
-- Should error because NULL was used for the table name.
|
|
SELECT drop_chunks(NULL, older_than => 3);
|
|
ERROR: invalid hypertable or continuous aggregate
|
|
-- should error because there is no relation with that OID.
|
|
SELECT drop_chunks(3533, older_than => 3);
|
|
ERROR: invalid hypertable or continuous aggregate
|
|
\set ON_ERROR_STOP 1
|
|
-- show created constraints and dimension slices for each chunk
|
|
SELECT c.table_name, cc.constraint_name, ds.id AS dimension_slice_id, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (c.id = cc.chunk_id)
|
|
FULL OUTER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.id = cc.dimension_slice_id)
|
|
ORDER BY c.id;
|
|
table_name | constraint_name | dimension_slice_id | range_start | range_end
|
|
-------------------+-----------------+--------------------+----------------------+---------------------
|
|
_hyper_1_1_chunk | constraint_1 | 1 | 1 | 2
|
|
_hyper_1_1_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_2_chunk | constraint_3 | 3 | 2 | 3
|
|
_hyper_1_2_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_3_chunk | constraint_4 | 4 | 3 | 4
|
|
_hyper_1_3_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_4_chunk | constraint_5 | 5 | 4 | 5
|
|
_hyper_1_4_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_5_chunk | constraint_7 | 7 | 5 | 6
|
|
_hyper_1_5_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_6_chunk | constraint_8 | 8 | 6 | 7
|
|
_hyper_1_6_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_2_7_chunk | constraint_9 | 9 | 1 | 2
|
|
_hyper_2_7_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_8_chunk | constraint_11 | 11 | 2 | 3
|
|
_hyper_2_8_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_9_chunk | constraint_12 | 12 | 3 | 4
|
|
_hyper_2_9_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_10_chunk | constraint_13 | 13 | 4 | 5
|
|
_hyper_2_10_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_11_chunk | constraint_15 | 15 | 5 | 6
|
|
_hyper_2_11_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_12_chunk | constraint_16 | 16 | 6 | 7
|
|
_hyper_2_12_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_3_13_chunk | constraint_17 | 17 | 1 | 2
|
|
_hyper_3_13_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_14_chunk | constraint_19 | 19 | 2 | 3
|
|
_hyper_3_14_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_15_chunk | constraint_20 | 20 | 3 | 4
|
|
_hyper_3_15_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_16_chunk | constraint_21 | 21 | 4 | 5
|
|
_hyper_3_16_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_17_chunk | constraint_23 | 23 | 5 | 6
|
|
_hyper_3_17_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_18_chunk | constraint_24 | 24 | 6 | 7
|
|
_hyper_3_18_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
(36 rows)
|
|
|
|
SELECT * FROM _timescaledb_catalog.dimension_slice ORDER BY id;
|
|
id | dimension_id | range_start | range_end
|
|
----+--------------+----------------------+---------------------
|
|
1 | 1 | 1 | 2
|
|
2 | 4 | 1073741823 | 9223372036854775807
|
|
3 | 1 | 2 | 3
|
|
4 | 1 | 3 | 4
|
|
5 | 1 | 4 | 5
|
|
6 | 4 | -9223372036854775808 | 1073741823
|
|
7 | 1 | 5 | 6
|
|
8 | 1 | 6 | 7
|
|
9 | 2 | 1 | 2
|
|
10 | 5 | 1073741823 | 9223372036854775807
|
|
11 | 2 | 2 | 3
|
|
12 | 2 | 3 | 4
|
|
13 | 2 | 4 | 5
|
|
14 | 5 | -9223372036854775808 | 1073741823
|
|
15 | 2 | 5 | 6
|
|
16 | 2 | 6 | 7
|
|
17 | 3 | 1 | 2
|
|
18 | 6 | 1073741823 | 9223372036854775807
|
|
19 | 3 | 2 | 3
|
|
20 | 3 | 3 | 4
|
|
21 | 3 | 4 | 5
|
|
22 | 6 | -9223372036854775808 | 1073741823
|
|
23 | 3 | 5 | 6
|
|
24 | 3 | 6 | 7
|
|
(24 rows)
|
|
|
|
-- Test that truncating chunks works
|
|
SELECT count(*) FROM _timescaledb_internal._hyper_2_7_chunk;
|
|
count
|
|
-------
|
|
1
|
|
(1 row)
|
|
|
|
TRUNCATE TABLE _timescaledb_internal._hyper_2_7_chunk;
|
|
SELECT count(*) FROM _timescaledb_internal._hyper_2_7_chunk;
|
|
count
|
|
-------
|
|
0
|
|
(1 row)
|
|
|
|
-- Drop one chunk "manually" and verify that dimension slices and
|
|
-- constraints are cleaned up. Each chunk has two constraints and two
|
|
-- dimension slices. Both constraints should be deleted, but only one
|
|
-- slice should be deleted since the space-dimension slice is shared
|
|
-- with other chunks in the same hypertable
|
|
DROP TABLE _timescaledb_internal._hyper_2_7_chunk;
|
|
-- Two constraints deleted compared to above
|
|
SELECT c.table_name, cc.constraint_name, ds.id AS dimension_slice_id, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (c.id = cc.chunk_id)
|
|
FULL OUTER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.id = cc.dimension_slice_id)
|
|
ORDER BY c.id;
|
|
table_name | constraint_name | dimension_slice_id | range_start | range_end
|
|
-------------------+-----------------+--------------------+----------------------+---------------------
|
|
_hyper_1_1_chunk | constraint_1 | 1 | 1 | 2
|
|
_hyper_1_1_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_2_chunk | constraint_3 | 3 | 2 | 3
|
|
_hyper_1_2_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_3_chunk | constraint_4 | 4 | 3 | 4
|
|
_hyper_1_3_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_4_chunk | constraint_5 | 5 | 4 | 5
|
|
_hyper_1_4_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_5_chunk | constraint_7 | 7 | 5 | 6
|
|
_hyper_1_5_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_6_chunk | constraint_8 | 8 | 6 | 7
|
|
_hyper_1_6_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_2_8_chunk | constraint_11 | 11 | 2 | 3
|
|
_hyper_2_8_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_9_chunk | constraint_12 | 12 | 3 | 4
|
|
_hyper_2_9_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_10_chunk | constraint_13 | 13 | 4 | 5
|
|
_hyper_2_10_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_11_chunk | constraint_15 | 15 | 5 | 6
|
|
_hyper_2_11_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_12_chunk | constraint_16 | 16 | 6 | 7
|
|
_hyper_2_12_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_3_13_chunk | constraint_17 | 17 | 1 | 2
|
|
_hyper_3_13_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_14_chunk | constraint_19 | 19 | 2 | 3
|
|
_hyper_3_14_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_15_chunk | constraint_20 | 20 | 3 | 4
|
|
_hyper_3_15_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_16_chunk | constraint_21 | 21 | 4 | 5
|
|
_hyper_3_16_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_17_chunk | constraint_23 | 23 | 5 | 6
|
|
_hyper_3_17_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_18_chunk | constraint_24 | 24 | 6 | 7
|
|
_hyper_3_18_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
(34 rows)
|
|
|
|
-- Only one dimension slice deleted
|
|
SELECT * FROM _timescaledb_catalog.dimension_slice ORDER BY id;
|
|
id | dimension_id | range_start | range_end
|
|
----+--------------+----------------------+---------------------
|
|
1 | 1 | 1 | 2
|
|
2 | 4 | 1073741823 | 9223372036854775807
|
|
3 | 1 | 2 | 3
|
|
4 | 1 | 3 | 4
|
|
5 | 1 | 4 | 5
|
|
6 | 4 | -9223372036854775808 | 1073741823
|
|
7 | 1 | 5 | 6
|
|
8 | 1 | 6 | 7
|
|
10 | 5 | 1073741823 | 9223372036854775807
|
|
11 | 2 | 2 | 3
|
|
12 | 2 | 3 | 4
|
|
13 | 2 | 4 | 5
|
|
14 | 5 | -9223372036854775808 | 1073741823
|
|
15 | 2 | 5 | 6
|
|
16 | 2 | 6 | 7
|
|
17 | 3 | 1 | 2
|
|
18 | 6 | 1073741823 | 9223372036854775807
|
|
19 | 3 | 2 | 3
|
|
20 | 3 | 3 | 4
|
|
21 | 3 | 4 | 5
|
|
22 | 6 | -9223372036854775808 | 1073741823
|
|
23 | 3 | 5 | 6
|
|
24 | 3 | 6 | 7
|
|
(23 rows)
|
|
|
|
-- We drop all chunks older than timestamp 2 in all hypertable. This
|
|
-- is added only to avoid making the diff for this commit larger than
|
|
-- necessary and make reviews easier.
|
|
SELECT drop_chunks(format('%1$I.%2$I', schema_name, table_name)::regclass, older_than => 2)
|
|
FROM _timescaledb_catalog.hypertable;
|
|
drop_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_1_1_chunk
|
|
_timescaledb_internal._hyper_3_13_chunk
|
|
(2 rows)
|
|
|
|
SELECT c.table_name, cc.constraint_name, ds.id AS dimension_slice_id, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (c.id = cc.chunk_id)
|
|
FULL OUTER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.id = cc.dimension_slice_id)
|
|
ORDER BY c.id;
|
|
table_name | constraint_name | dimension_slice_id | range_start | range_end
|
|
-------------------+-----------------+--------------------+----------------------+---------------------
|
|
_hyper_1_2_chunk | constraint_3 | 3 | 2 | 3
|
|
_hyper_1_2_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_3_chunk | constraint_4 | 4 | 3 | 4
|
|
_hyper_1_3_chunk | constraint_2 | 2 | 1073741823 | 9223372036854775807
|
|
_hyper_1_4_chunk | constraint_5 | 5 | 4 | 5
|
|
_hyper_1_4_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_5_chunk | constraint_7 | 7 | 5 | 6
|
|
_hyper_1_5_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_1_6_chunk | constraint_8 | 8 | 6 | 7
|
|
_hyper_1_6_chunk | constraint_6 | 6 | -9223372036854775808 | 1073741823
|
|
_hyper_2_8_chunk | constraint_11 | 11 | 2 | 3
|
|
_hyper_2_8_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_9_chunk | constraint_12 | 12 | 3 | 4
|
|
_hyper_2_9_chunk | constraint_10 | 10 | 1073741823 | 9223372036854775807
|
|
_hyper_2_10_chunk | constraint_13 | 13 | 4 | 5
|
|
_hyper_2_10_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_11_chunk | constraint_15 | 15 | 5 | 6
|
|
_hyper_2_11_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_2_12_chunk | constraint_16 | 16 | 6 | 7
|
|
_hyper_2_12_chunk | constraint_14 | 14 | -9223372036854775808 | 1073741823
|
|
_hyper_3_14_chunk | constraint_19 | 19 | 2 | 3
|
|
_hyper_3_14_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_15_chunk | constraint_20 | 20 | 3 | 4
|
|
_hyper_3_15_chunk | constraint_18 | 18 | 1073741823 | 9223372036854775807
|
|
_hyper_3_16_chunk | constraint_21 | 21 | 4 | 5
|
|
_hyper_3_16_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_17_chunk | constraint_23 | 23 | 5 | 6
|
|
_hyper_3_17_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
_hyper_3_18_chunk | constraint_24 | 24 | 6 | 7
|
|
_hyper_3_18_chunk | constraint_22 | 22 | -9223372036854775808 | 1073741823
|
|
(30 rows)
|
|
|
|
SELECT * FROM _timescaledb_catalog.dimension_slice ORDER BY id;
|
|
id | dimension_id | range_start | range_end
|
|
----+--------------+----------------------+---------------------
|
|
2 | 4 | 1073741823 | 9223372036854775807
|
|
3 | 1 | 2 | 3
|
|
4 | 1 | 3 | 4
|
|
5 | 1 | 4 | 5
|
|
6 | 4 | -9223372036854775808 | 1073741823
|
|
7 | 1 | 5 | 6
|
|
8 | 1 | 6 | 7
|
|
10 | 5 | 1073741823 | 9223372036854775807
|
|
11 | 2 | 2 | 3
|
|
12 | 2 | 3 | 4
|
|
13 | 2 | 4 | 5
|
|
14 | 5 | -9223372036854775808 | 1073741823
|
|
15 | 2 | 5 | 6
|
|
16 | 2 | 6 | 7
|
|
18 | 6 | 1073741823 | 9223372036854775807
|
|
19 | 3 | 2 | 3
|
|
20 | 3 | 3 | 4
|
|
21 | 3 | 4 | 5
|
|
22 | 6 | -9223372036854775808 | 1073741823
|
|
23 | 3 | 5 | 6
|
|
24 | 3 | 6 | 7
|
|
(21 rows)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
2 | 1 | _timescaledb_internal | _hyper_1_2_chunk | 2 | 3
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
5 | 1 | _timescaledb_internal | _hyper_1_5_chunk | 5 | 6
|
|
6 | 1 | _timescaledb_internal | _hyper_1_6_chunk | 6 | 7
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(10 rows)
|
|
|
|
-- next two calls of show_chunks should give same set of chunks as above when combined
|
|
SELECT show_chunks('drop_chunk_test1');
|
|
show_chunks
|
|
----------------------------------------
|
|
_timescaledb_internal._hyper_1_2_chunk
|
|
_timescaledb_internal._hyper_1_3_chunk
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
_timescaledb_internal._hyper_1_5_chunk
|
|
_timescaledb_internal._hyper_1_6_chunk
|
|
(5 rows)
|
|
|
|
SELECT * FROM show_chunks('drop_chunk_test2');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_2_8_chunk
|
|
_timescaledb_internal._hyper_2_9_chunk
|
|
_timescaledb_internal._hyper_2_10_chunk
|
|
_timescaledb_internal._hyper_2_11_chunk
|
|
_timescaledb_internal._hyper_2_12_chunk
|
|
(5 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_2_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_5_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_6_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_14_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_15_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_16_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_17_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_18_chunk | table | default_perm_user
|
|
(15 rows)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test1\', older_than => 3)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test1\', older_than => 3)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
5 | 1 | _timescaledb_internal | _hyper_1_5_chunk | 5 | 6
|
|
6 | 1 | _timescaledb_internal | _hyper_1_6_chunk | 6 | 7
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(9 rows)
|
|
|
|
\dt "_timescaledb_internal".*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+------------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_5_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_6_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_14_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_15_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_16_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_17_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_3_18_chunk | table | default_perm_user
|
|
_timescaledb_internal | bgw_job_stat | table | super_user
|
|
_timescaledb_internal | bgw_policy_chunk_stats | table | super_user
|
|
_timescaledb_internal | job_errors | table | super_user
|
|
(17 rows)
|
|
|
|
-- next two calls of show_chunks should give same set of chunks as above when combined
|
|
SELECT show_chunks('drop_chunk_test1');
|
|
show_chunks
|
|
----------------------------------------
|
|
_timescaledb_internal._hyper_1_3_chunk
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
_timescaledb_internal._hyper_1_5_chunk
|
|
_timescaledb_internal._hyper_1_6_chunk
|
|
(4 rows)
|
|
|
|
SELECT * FROM show_chunks('drop_chunk_test2');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_2_8_chunk
|
|
_timescaledb_internal._hyper_2_9_chunk
|
|
_timescaledb_internal._hyper_2_10_chunk
|
|
_timescaledb_internal._hyper_2_11_chunk
|
|
_timescaledb_internal._hyper_2_12_chunk
|
|
(5 rows)
|
|
|
|
-- 2,147,483,647 is the largest int so this tests that BIGINTs work
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test3\', older_than => 2147483648)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test3\', older_than => 2147483648)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 5 | 5
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2' OR h.table_name = 'drop_chunk_test3')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
5 | 1 | _timescaledb_internal | _hyper_1_5_chunk | 5 | 6
|
|
6 | 1 | _timescaledb_internal | _hyper_1_6_chunk | 6 | 7
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(9 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_5_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_6_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
(9 rows)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
-- should error because no hypertable
|
|
SELECT drop_chunks('drop_chunk_test4', older_than => 5);
|
|
ERROR: relation "drop_chunk_test4" does not exist at character 20
|
|
SELECT show_chunks('drop_chunk_test4');
|
|
ERROR: relation "drop_chunk_test4" does not exist at character 20
|
|
SELECT show_chunks('drop_chunk_test4', 5);
|
|
ERROR: relation "drop_chunk_test4" does not exist at character 20
|
|
\set ON_ERROR_STOP 1
|
|
DROP TABLE _timescaledb_internal._hyper_1_6_chunk;
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1' OR h.table_name = 'drop_chunk_test2')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
5 | 1 | _timescaledb_internal | _hyper_1_5_chunk | 5 | 6
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(8 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_5_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
(8 rows)
|
|
|
|
-- newer_than tests
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test1\', newer_than=>5)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test1\', newer_than=>5, verbose => true)::NAME'
|
|
\set ECHO errors
|
|
psql:include/query_result_test_equal.sql:16: INFO: dropping chunk _timescaledb_internal._hyper_1_5_chunk
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+------------------+-------------+-----------
|
|
3 | 1 | _timescaledb_internal | _hyper_1_3_chunk | 3 | 4
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
(2 rows)
|
|
|
|
SELECT show_chunks('drop_chunk_test1');
|
|
show_chunks
|
|
----------------------------------------
|
|
_timescaledb_internal._hyper_1_3_chunk
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
(2 rows)
|
|
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_1_3_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_1_4_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_10_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
(7 rows)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test1\', older_than=>4, newer_than=>3)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test1\', older_than=>4, newer_than=>3)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public' AND (h.table_name = 'drop_chunk_test1')
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+------------------+-------------+-----------
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
(1 row)
|
|
|
|
-- the call of show_chunks should give same set of chunks as above
|
|
SELECT show_chunks('drop_chunk_test1');
|
|
show_chunks
|
|
----------------------------------------
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
(1 row)
|
|
|
|
SELECT c.id AS chunk_id, c.hypertable_id, c.schema_name AS chunk_schema, c.table_name AS chunk_table, ds.range_start, ds.range_end
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
INNER JOIN dimension_get_time(h.id) time_dimension ON(true)
|
|
INNER JOIN _timescaledb_catalog.dimension_slice ds ON (ds.dimension_id = time_dimension.id)
|
|
INNER JOIN _timescaledb_catalog.chunk_constraint cc ON (cc.dimension_slice_id = ds.id AND cc.chunk_id = c.id)
|
|
WHERE h.schema_name = 'public'
|
|
ORDER BY c.id;
|
|
chunk_id | hypertable_id | chunk_schema | chunk_table | range_start | range_end
|
|
----------+---------------+-----------------------+-------------------+-------------+-----------
|
|
4 | 1 | _timescaledb_internal | _hyper_1_4_chunk | 4 | 5
|
|
8 | 2 | _timescaledb_internal | _hyper_2_8_chunk | 2 | 3
|
|
9 | 2 | _timescaledb_internal | _hyper_2_9_chunk | 3 | 4
|
|
10 | 2 | _timescaledb_internal | _hyper_2_10_chunk | 4 | 5
|
|
11 | 2 | _timescaledb_internal | _hyper_2_11_chunk | 5 | 6
|
|
12 | 2 | _timescaledb_internal | _hyper_2_12_chunk | 6 | 7
|
|
(6 rows)
|
|
|
|
SELECT drop_chunks(format('%1$I.%2$I', schema_name, table_name)::regclass, older_than => 5, newer_than => 4)
|
|
FROM _timescaledb_catalog.hypertable WHERE schema_name = 'public';
|
|
drop_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_1_4_chunk
|
|
_timescaledb_internal._hyper_2_10_chunk
|
|
(2 rows)
|
|
|
|
CREATE TABLE PUBLIC.drop_chunk_test_ts(time timestamp, temp float8, device_id text);
|
|
SELECT create_hypertable('public.drop_chunk_test_ts', 'time', chunk_time_interval => interval '1 minute', create_default_indexes=>false);
|
|
WARNING: column type "timestamp without time zone" used for "time" does not follow best practices
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
---------------------------------
|
|
(4,public,drop_chunk_test_ts,t)
|
|
(1 row)
|
|
|
|
CREATE TABLE PUBLIC.drop_chunk_test_tstz(time timestamptz, temp float8, device_id text);
|
|
SELECT create_hypertable('public.drop_chunk_test_tstz', 'time', chunk_time_interval => interval '1 minute', create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
-----------------------------------
|
|
(5,public,drop_chunk_test_tstz,t)
|
|
(1 row)
|
|
|
|
SET timezone = '+1';
|
|
INSERT INTO PUBLIC.drop_chunk_test_ts VALUES(now()-INTERVAL '5 minutes', 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test_ts VALUES(now()+INTERVAL '5 minutes', 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test_tstz VALUES(now()-INTERVAL '5 minutes', 1.0, 'dev1');
|
|
INSERT INTO PUBLIC.drop_chunk_test_tstz VALUES(now()+INTERVAL '5 minutes', 1.0, 'dev1');
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_4_19_chunk |
|
|
_timescaledb_internal._hyper_4_20_chunk |
|
|
(2 rows)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_tstz');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_5_21_chunk |
|
|
_timescaledb_internal._hyper_5_22_chunk |
|
|
(2 rows)
|
|
|
|
BEGIN;
|
|
SELECT show_chunks('drop_chunk_test_ts');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_4_19_chunk
|
|
_timescaledb_internal._hyper_4_20_chunk
|
|
(2 rows)
|
|
|
|
SELECT show_chunks('drop_chunk_test_ts', now()::timestamp-interval '1 minute');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_4_19_chunk
|
|
(1 row)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', newer_than => interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', newer_than => interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', older_than => interval \'6 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', older_than => interval \'6 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 0 | 0
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_4_19_chunk |
|
|
(1 row)
|
|
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', older_than => interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('drop_chunk_test_tstz');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_5_21_chunk
|
|
_timescaledb_internal._hyper_5_22_chunk
|
|
(2 rows)
|
|
|
|
SELECT show_chunks('drop_chunk_test_tstz', older_than => now() - interval '1 minute', newer_than => now() - interval '6 minute');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_5_21_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('drop_chunk_test_tstz', newer_than => now() - interval '1 minute');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_5_22_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('drop_chunk_test_tstz', older_than => now() - interval '1 minute');
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_5_21_chunk
|
|
(1 row)
|
|
|
|
\set QUERY1 'SELECT show_chunks(older_than => interval \'1 minute\', relation => \'drop_chunk_test_tstz\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_tstz\', interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_tstz');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_5_22_chunk |
|
|
(1 row)
|
|
|
|
ROLLBACK;
|
|
BEGIN;
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', newer_than => interval \'6 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', newer_than => interval \'6 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 2 | 2
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
ROLLBACK;
|
|
BEGIN;
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', older_than => interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', older_than => interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_4_20_chunk |
|
|
(1 row)
|
|
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_tstz\', older_than => interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_tstz\', older_than => interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_tstz');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_5_22_chunk |
|
|
(1 row)
|
|
|
|
ROLLBACK;
|
|
BEGIN;
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_ts\', older_than => now()::timestamp-interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_ts\', older_than => now()::timestamp-interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_ts');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_4_20_chunk |
|
|
(1 row)
|
|
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_tstz\', older_than => now()-interval \'1 minute\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_tstz\', older_than => now()-interval \'1 minute\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_tstz');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_5_22_chunk |
|
|
(1 row)
|
|
|
|
ROLLBACK;
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_4_19_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_4_20_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_5_21_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_5_22_chunk | table | default_perm_user
|
|
(8 rows)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
SELECT drop_chunks(interval '1 minute');
|
|
ERROR: function drop_chunks(interval) does not exist at character 8
|
|
SELECT drop_chunks('drop_chunk_test3', interval '1 minute');
|
|
ERROR: can only use an INTERVAL for TIMESTAMP, TIMESTAMPTZ, and DATE types
|
|
SELECT drop_chunks('drop_chunk_test_ts', (now()-interval '1 minute'));
|
|
ERROR: invalid time argument type "timestamp with time zone"
|
|
SELECT drop_chunks('drop_chunk_test3', verbose => true);
|
|
ERROR: invalid time range for dropping chunks
|
|
\set ON_ERROR_STOP 1
|
|
\dt "_timescaledb_internal"._hyper*
|
|
List of relations
|
|
Schema | Name | Type | Owner
|
|
-----------------------+-------------------+-------+-------------------
|
|
_timescaledb_internal | _hyper_2_11_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_12_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_8_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_2_9_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_4_19_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_4_20_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_5_21_chunk | table | default_perm_user
|
|
_timescaledb_internal | _hyper_5_22_chunk | table | default_perm_user
|
|
(8 rows)
|
|
|
|
CREATE TABLE PUBLIC.drop_chunk_test_date(time date, temp float8, device_id text);
|
|
SELECT create_hypertable('public.drop_chunk_test_date', 'time', chunk_time_interval => interval '1 day', create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
-----------------------------------
|
|
(6,public,drop_chunk_test_date,t)
|
|
(1 row)
|
|
|
|
SET timezone = '+100';
|
|
INSERT INTO PUBLIC.drop_chunk_test_date VALUES(now()-INTERVAL '2 day', 1.0, 'dev1');
|
|
BEGIN;
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_date\', older_than => interval \'1 day\')::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_date\', older_than => interval \'1 day\')::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_date');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
ROLLBACK;
|
|
BEGIN;
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test_date\', older_than => (now()-interval \'1 day\')::date)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test_date\', older_than => (now()-interval \'1 day\')::date)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('drop_chunk_test_date');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
ROLLBACK;
|
|
SET timezone TO '-5';
|
|
CREATE TABLE chunk_id_from_relid_test(time bigint, temp float8, device_id int);
|
|
SELECT hypertable_id FROM create_hypertable('chunk_id_from_relid_test', 'time', chunk_time_interval => 10) \gset
|
|
NOTICE: adding not-null constraint to column "time"
|
|
INSERT INTO chunk_id_from_relid_test VALUES (0, 1.1, 0), (0, 1.3, 11), (12, 2.0, 0), (12, 0.1, 11);
|
|
SELECT _timescaledb_internal.chunk_id_from_relid(tableoid) FROM chunk_id_from_relid_test;
|
|
chunk_id_from_relid
|
|
---------------------
|
|
24
|
|
24
|
|
25
|
|
25
|
|
(4 rows)
|
|
|
|
DROP TABLE chunk_id_from_relid_test;
|
|
CREATE TABLE chunk_id_from_relid_test(time bigint, temp float8, device_id int);
|
|
SELECT hypertable_id FROM create_hypertable('chunk_id_from_relid_test',
|
|
'time', chunk_time_interval => 10,
|
|
partitioning_column => 'device_id',
|
|
number_partitions => 3) \gset
|
|
NOTICE: adding not-null constraint to column "time"
|
|
INSERT INTO chunk_id_from_relid_test VALUES (0, 1.1, 2), (0, 1.3, 11), (12, 2.0, 2), (12, 0.1, 11);
|
|
SELECT _timescaledb_internal.chunk_id_from_relid(tableoid) FROM chunk_id_from_relid_test;
|
|
chunk_id_from_relid
|
|
---------------------
|
|
26
|
|
27
|
|
28
|
|
29
|
|
(4 rows)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
SELECT _timescaledb_internal.chunk_id_from_relid('pg_type'::regclass);
|
|
ERROR: chunk not found
|
|
SELECT _timescaledb_internal.chunk_id_from_relid('chunk_id_from_relid_test'::regclass);
|
|
ERROR: chunk not found
|
|
-- test drop/show_chunks on custom partition types
|
|
CREATE FUNCTION extract_time(a jsonb)
|
|
RETURNS TIMESTAMPTZ
|
|
LANGUAGE SQL
|
|
AS $$ SELECT (a->>'time')::TIMESTAMPTZ $$ IMMUTABLE;
|
|
CREATE TABLE test_weird_type(a jsonb);
|
|
SELECT create_hypertable('test_weird_type', 'a',
|
|
time_partitioning_func=>'extract_time'::regproc,
|
|
chunk_time_interval=>'2 hours'::interval);
|
|
NOTICE: adding not-null constraint to column "a"
|
|
create_hypertable
|
|
------------------------------
|
|
(9,public,test_weird_type,t)
|
|
(1 row)
|
|
|
|
INSERT INTO test_weird_type VALUES ('{"time":"2019/06/06 1:00+0"}'), ('{"time":"2019/06/06 5:00+0"}');
|
|
SELECT * FROM test.show_subtables('test_weird_type');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_9_30_chunk |
|
|
_timescaledb_internal._hyper_9_31_chunk |
|
|
(2 rows)
|
|
|
|
SELECT show_chunks('test_weird_type', older_than=>'2019/06/06 4:00+0'::TIMESTAMPTZ);
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_9_30_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test_weird_type', older_than=>'2019/06/06 10:00+0'::TIMESTAMPTZ);
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_9_30_chunk
|
|
_timescaledb_internal._hyper_9_31_chunk
|
|
(2 rows)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'test_weird_type\', older_than => \'2019/06/06 5:00+0\'::TIMESTAMPTZ)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'test_weird_type\', older_than => \'2019/06/06 5:00+0\'::TIMESTAMPTZ)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('test_weird_type');
|
|
Child | Tablespace
|
|
-----------------------------------------+------------
|
|
_timescaledb_internal._hyper_9_31_chunk |
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test_weird_type', older_than=>'2019/06/06 4:00+0'::TIMESTAMPTZ);
|
|
show_chunks
|
|
-------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('test_weird_type', older_than=>'2019/06/06 10:00+0'::TIMESTAMPTZ);
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_9_31_chunk
|
|
(1 row)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'test_weird_type\', older_than => \'2019/06/06 6:00+0\'::TIMESTAMPTZ)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'test_weird_type\', older_than => \'2019/06/06 6:00+0\'::TIMESTAMPTZ)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('test_weird_type');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('test_weird_type', older_than=>'2019/06/06 10:00+0'::TIMESTAMPTZ);
|
|
show_chunks
|
|
-------------
|
|
(0 rows)
|
|
|
|
DROP TABLE test_weird_type;
|
|
CREATE FUNCTION extract_int_time(a jsonb)
|
|
RETURNS BIGINT
|
|
LANGUAGE SQL
|
|
AS $$ SELECT (a->>'time')::BIGINT $$ IMMUTABLE;
|
|
CREATE TABLE test_weird_type_i(a jsonb);
|
|
SELECT create_hypertable('test_weird_type_i', 'a',
|
|
time_partitioning_func=>'extract_int_time'::regproc,
|
|
chunk_time_interval=>5);
|
|
NOTICE: adding not-null constraint to column "a"
|
|
create_hypertable
|
|
---------------------------------
|
|
(10,public,test_weird_type_i,t)
|
|
(1 row)
|
|
|
|
INSERT INTO test_weird_type_i VALUES ('{"time":"0"}'), ('{"time":"5"}');
|
|
SELECT * FROM test.show_subtables('test_weird_type_i');
|
|
Child | Tablespace
|
|
------------------------------------------+------------
|
|
_timescaledb_internal._hyper_10_32_chunk |
|
|
_timescaledb_internal._hyper_10_33_chunk |
|
|
(2 rows)
|
|
|
|
SELECT show_chunks('test_weird_type_i', older_than=>5);
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_10_32_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test_weird_type_i', older_than=>10);
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_10_32_chunk
|
|
_timescaledb_internal._hyper_10_33_chunk
|
|
(2 rows)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'test_weird_type_i\', older_than=>5)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'test_weird_type_i\', older_than => 5)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('test_weird_type_i');
|
|
Child | Tablespace
|
|
------------------------------------------+------------
|
|
_timescaledb_internal._hyper_10_33_chunk |
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test_weird_type_i', older_than=>5);
|
|
show_chunks
|
|
-------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('test_weird_type_i', older_than=>10);
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_10_33_chunk
|
|
(1 row)
|
|
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'test_weird_type_i\', older_than=>10)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'test_weird_type_i\', older_than => 10)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
SELECT * FROM test.show_subtables('test_weird_type_i');
|
|
Child | Tablespace
|
|
-------+------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('test_weird_type_i', older_than=>10);
|
|
show_chunks
|
|
-------------
|
|
(0 rows)
|
|
|
|
DROP TABLE test_weird_type_i CASCADE;
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
ALTER TABLE drop_chunk_test2 OWNER TO :ROLE_DEFAULT_PERM_USER_2;
|
|
--drop chunks 3 will have a chunk we a dependent object (a view)
|
|
--we create the dependent object now
|
|
INSERT INTO PUBLIC.drop_chunk_test3 VALUES(1, 1.0, 'dev1');
|
|
SELECT c.schema_name as chunk_schema, c.table_name as chunk_table
|
|
FROM _timescaledb_catalog.chunk c
|
|
INNER JOIN _timescaledb_catalog.hypertable h ON (c.hypertable_id = h.id)
|
|
WHERE h.schema_name = 'public' AND h.table_name = 'drop_chunk_test3'
|
|
ORDER BY c.id \gset
|
|
create view dependent_view as SELECT * FROM :"chunk_schema".:"chunk_table";
|
|
create view dependent_view2 as SELECT * FROM :"chunk_schema".:"chunk_table";
|
|
ALTER TABLE drop_chunk_test3 OWNER TO :ROLE_DEFAULT_PERM_USER_2;
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER_2
|
|
\set ON_ERROR_STOP 0
|
|
SELECT drop_chunks('drop_chunk_test1', older_than=>4, newer_than=>3);
|
|
ERROR: must be owner of hypertable "drop_chunk_test1"
|
|
--works with modified owner tables
|
|
-- show_chunks and drop_chunks output should be the same
|
|
\set QUERY1 'SELECT show_chunks(\'drop_chunk_test2\', older_than=>4, newer_than=>3)::NAME'
|
|
\set QUERY2 'SELECT drop_chunks(\'drop_chunk_test2\', older_than=>4, newer_than=>3)::NAME'
|
|
\set ECHO errors
|
|
Different Rows | Total Rows from Query 1 | Total Rows from Query 2
|
|
----------------+-------------------------+-------------------------
|
|
0 | 1 | 1
|
|
(1 row)
|
|
|
|
\set VERBOSITY default
|
|
--this fails because there are dependent objects
|
|
SELECT drop_chunks('drop_chunk_test3', older_than=>100);
|
|
ERROR: cannot drop table _timescaledb_internal._hyper_3_34_chunk because other objects depend on it
|
|
DETAIL: view dependent_view depends on table _timescaledb_internal._hyper_3_34_chunk
|
|
view dependent_view2 depends on table _timescaledb_internal._hyper_3_34_chunk
|
|
HINT: Use DROP ... to drop the dependent objects.
|
|
\set VERBOSITY terse
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
DROP VIEW dependent_view;
|
|
DROP VIEW dependent_view2;
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER_2
|
|
\set ON_ERROR_STOP 1
|
|
--drop chunks from hypertable with same name in different schema
|
|
-- order of schema in search_path matters --
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
drop table chunk_id_from_relid_test;
|
|
drop table drop_chunk_test1;
|
|
drop table drop_chunk_test2;
|
|
drop table drop_chunk_test3;
|
|
CREATE SCHEMA try_schema;
|
|
CREATE SCHEMA test1;
|
|
CREATE SCHEMA test2;
|
|
CREATE SCHEMA test3;
|
|
GRANT CREATE ON SCHEMA try_schema, test1, test2, test3 TO :ROLE_DEFAULT_PERM_USER;
|
|
GRANT USAGE ON SCHEMA try_schema, test1, test2, test3 TO :ROLE_DEFAULT_PERM_USER;
|
|
SET ROLE :ROLE_DEFAULT_PERM_USER;
|
|
CREATE TABLE try_schema.drop_chunk_test_date(time date, temp float8, device_id text);
|
|
SELECT create_hypertable('try_schema.drop_chunk_test_date', 'time', chunk_time_interval => interval '1 day', create_default_indexes=>false);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
----------------------------------------
|
|
(11,try_schema,drop_chunk_test_date,t)
|
|
(1 row)
|
|
|
|
INSERT INTO public.drop_chunk_test_date VALUES( '2020-01-10', 100, 'hello');
|
|
INSERT INTO try_schema.drop_chunk_test_date VALUES( '2020-01-10', 100, 'hello');
|
|
set search_path to try_schema, test1, test2, test3, public;
|
|
SELECT show_chunks('public.drop_chunk_test_date', older_than=>'1 day'::interval);
|
|
show_chunks
|
|
-----------------------------------------
|
|
_timescaledb_internal._hyper_6_35_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('try_schema.drop_chunk_test_date', older_than=>'1 day'::interval);
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_11_36_chunk
|
|
(1 row)
|
|
|
|
SELECT drop_chunks('drop_chunk_test_date', older_than=> '1 day'::interval);
|
|
drop_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_11_36_chunk
|
|
(1 row)
|
|
|
|
-- test drop chunks across two tables within the same schema
|
|
CREATE TABLE test1.hyper1 (time bigint, temp float);
|
|
CREATE TABLE test1.hyper2 (time bigint, temp float);
|
|
SELECT create_hypertable('test1.hyper1', 'time', chunk_time_interval => 10);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
---------------------
|
|
(12,test1,hyper1,t)
|
|
(1 row)
|
|
|
|
SELECT create_hypertable('test1.hyper2', 'time', chunk_time_interval => 10);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
---------------------
|
|
(13,test1,hyper2,t)
|
|
(1 row)
|
|
|
|
INSERT INTO test1.hyper1 VALUES (10, 0.5);
|
|
INSERT INTO test1.hyper2 VALUES (10, 0.7);
|
|
SELECT show_chunks('test1.hyper1');
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_12_37_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test1.hyper2');
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_13_38_chunk
|
|
(1 row)
|
|
|
|
-- test drop chunks for given table name across all schemas
|
|
CREATE TABLE test2.hyperx (time bigint, temp float);
|
|
CREATE TABLE test3.hyperx (time bigint, temp float);
|
|
SELECT create_hypertable('test2.hyperx', 'time', chunk_time_interval => 10);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
---------------------
|
|
(14,test2,hyperx,t)
|
|
(1 row)
|
|
|
|
SELECT create_hypertable('test3.hyperx', 'time', chunk_time_interval => 10);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
create_hypertable
|
|
---------------------
|
|
(15,test3,hyperx,t)
|
|
(1 row)
|
|
|
|
INSERT INTO test2.hyperx VALUES (10, 0.5);
|
|
INSERT INTO test3.hyperx VALUES (10, 0.7);
|
|
SELECT show_chunks('test2.hyperx');
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_14_39_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test3.hyperx');
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_15_40_chunk
|
|
(1 row)
|
|
|
|
-- This will only drop from one of the tables since the one that is
|
|
-- first in the search path will hide the other one.
|
|
SELECT drop_chunks('hyperx', older_than => 100);
|
|
drop_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_14_39_chunk
|
|
(1 row)
|
|
|
|
SELECT show_chunks('test2.hyperx');
|
|
show_chunks
|
|
-------------
|
|
(0 rows)
|
|
|
|
SELECT show_chunks('test3.hyperx');
|
|
show_chunks
|
|
------------------------------------------
|
|
_timescaledb_internal._hyper_15_40_chunk
|
|
(1 row)
|
|
|
|
-- Check CTAS behavior when internal ALTER TABLE gets fired
|
|
CREATE TABLE PUBLIC.drop_chunk_test4(time bigint, temp float8, device_id text);
|
|
CREATE TABLE drop_chunks_table_id AS SELECT hypertable_id
|
|
FROM create_hypertable('public.drop_chunk_test4', 'time', chunk_time_interval => 1);
|
|
NOTICE: adding not-null constraint to column "time"
|
|
-- TEST for internal api that drops a single chunk
|
|
-- this drops the table and removes entry from the catalog.
|
|
-- does not affect any materialized cagg data
|
|
INSERT INTO test1.hyper1 VALUES (20, 0.5);
|
|
SELECT chunk_schema as "CHSCHEMA", chunk_name as "CHNAME"
|
|
FROM timescaledb_information.chunks
|
|
WHERE hypertable_name = 'hyper1' and hypertable_schema = 'test1'
|
|
ORDER BY chunk_name ;
|
|
CHSCHEMA | CHNAME
|
|
-----------------------+--------------------
|
|
_timescaledb_internal | _hyper_12_37_chunk
|
|
_timescaledb_internal | _hyper_12_41_chunk
|
|
(2 rows)
|
|
|
|
--drop one of the chunks
|
|
SELECT chunk_schema || '.' || chunk_name as "CHNAME"
|
|
FROM timescaledb_information.chunks
|
|
WHERE hypertable_name = 'hyper1' and hypertable_schema = 'test1'
|
|
ORDER BY chunk_name LIMIT 1
|
|
\gset
|
|
SELECT _timescaledb_internal.drop_chunk(:'CHNAME');
|
|
drop_chunk
|
|
------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT chunk_schema as "CHSCHEMA", chunk_name as "CHNAME"
|
|
FROM timescaledb_information.chunks
|
|
WHERE hypertable_name = 'hyper1' and hypertable_schema = 'test1'
|
|
ORDER BY chunk_name ;
|
|
CHSCHEMA | CHNAME
|
|
-----------------------+--------------------
|
|
_timescaledb_internal | _hyper_12_41_chunk
|
|
(1 row)
|
|
|