-- 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)