timescaledb/test/expected/broken_tables.out
Sven Klemm a9751ccd5e Move partitioning functions to _timescaledb_functions schema
To increase schema security we do not want to mix our own internal
objects with user objects. Since chunks are created in the
_timescaledb_internal schema our internal functions should live in
a different dedicated schema. This patch make the necessary
adjustments for the following functions:

- get_partition_for_key(val anyelement)
- get_partition_hash(val anyelement)
2023-08-29 12:55:22 +02:00

125 lines
5.9 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.
-- Hypertables can break as a result of race conditions, but we should
-- still not crash when trying to truncate or delete the broken table.
\c :TEST_DBNAME :ROLE_SUPERUSER
CREATE VIEW missing_slices AS
SELECT DISTINCT
dimension_slice_id,
constraint_name,
attname AS column_name,
pg_get_expr(conbin, conrelid) AS constraint_expr
FROM
_timescaledb_catalog.chunk_constraint cc
JOIN _timescaledb_catalog.chunk ch ON cc.chunk_id = ch.id
JOIN pg_constraint ON conname = constraint_name
JOIN pg_namespace ns ON connamespace = ns.oid
AND ns.nspname = ch.schema_name
JOIN pg_attribute ON attnum = conkey[1]
AND attrelid = conrelid
WHERE
dimension_slice_id NOT IN (SELECT id FROM _timescaledb_catalog.dimension_slice);
-- To drop rows from dimension_slice table, we need to remove some
-- constraints.
ALTER TABLE _timescaledb_catalog.chunk_constraint
DROP CONSTRAINT chunk_constraint_dimension_slice_id_fkey;
CREATE TABLE chunk_test_int(time integer, temp float8, tag integer, color integer);
SELECT create_hypertable('chunk_test_int', 'time', 'tag', 2, chunk_time_interval => 3);
NOTICE: adding not-null constraint to column "time"
create_hypertable
-----------------------------
(1,public,chunk_test_int,t)
(1 row)
INSERT INTO chunk_test_int VALUES
(4, 24.3, 1, 1),
(4, 24.3, 2, 1),
(10, 24.3, 2, 1);
SELECT * FROM _timescaledb_catalog.dimension_slice ORDER BY id;
id | dimension_id | range_start | range_end
----+--------------+----------------------+---------------------
1 | 1 | 3 | 6
2 | 2 | -9223372036854775808 | 1073741823
3 | 2 | 1073741823 | 9223372036854775807
4 | 1 | 9 | 12
(4 rows)
SELECT DISTINCT
chunk_id,
dimension_slice_id,
constraint_name,
pg_get_expr(conbin, conrelid) AS constraint_expr
FROM _timescaledb_catalog.chunk_constraint,
LATERAL (
SELECT *
FROM pg_constraint JOIN pg_namespace ns ON connamespace = ns.oid
WHERE conname = constraint_name
) AS con
ORDER BY chunk_id, dimension_slice_id;
chunk_id | dimension_slice_id | constraint_name | constraint_expr
----------+--------------------+-----------------+----------------------------------------------------------------
1 | 1 | constraint_1 | (("time" >= 3) AND ("time" < 6))
1 | 2 | constraint_2 | (_timescaledb_functions.get_partition_hash(tag) < 1073741823)
2 | 1 | constraint_1 | (("time" >= 3) AND ("time" < 6))
2 | 3 | constraint_3 | (_timescaledb_functions.get_partition_hash(tag) >= 1073741823)
3 | 3 | constraint_3 | (_timescaledb_functions.get_partition_hash(tag) >= 1073741823)
3 | 4 | constraint_4 | (("time" >= 9) AND ("time" < 12))
(6 rows)
DELETE FROM _timescaledb_catalog.dimension_slice WHERE id = 1;
SELECT * FROM missing_slices;
dimension_slice_id | constraint_name | column_name | constraint_expr
--------------------+-----------------+-------------+----------------------------------
1 | constraint_1 | time | (("time" >= 3) AND ("time" < 6))
(1 row)
TRUNCATE TABLE chunk_test_int;
WARNING: unexpected state for chunk _timescaledb_internal._hyper_1_1_chunk, dropping anyway
WARNING: unexpected state for chunk _timescaledb_internal._hyper_1_2_chunk, dropping anyway
DROP TABLE chunk_test_int;
CREATE TABLE chunk_test_int(time integer, temp float8, tag integer, color integer);
SELECT create_hypertable('chunk_test_int', 'time', 'tag', 2, chunk_time_interval => 3);
NOTICE: adding not-null constraint to column "time"
create_hypertable
-----------------------------
(2,public,chunk_test_int,t)
(1 row)
INSERT INTO chunk_test_int VALUES
(4, 24.3, 1, 1),
(4, 24.3, 2, 1),
(10, 24.3, 2, 1);
SELECT DISTINCT
chunk_id,
dimension_slice_id,
constraint_name,
pg_get_expr(conbin, conrelid) AS constraint_expr
FROM _timescaledb_catalog.chunk_constraint,
LATERAL (
SELECT *
FROM pg_constraint JOIN pg_namespace ns ON connamespace = ns.oid
WHERE conname = constraint_name
) AS con
ORDER BY chunk_id, dimension_slice_id;
chunk_id | dimension_slice_id | constraint_name | constraint_expr
----------+--------------------+-----------------+----------------------------------------------------------------
4 | 5 | constraint_5 | (("time" >= 3) AND ("time" < 6))
4 | 6 | constraint_6 | (_timescaledb_functions.get_partition_hash(tag) < 1073741823)
5 | 5 | constraint_5 | (("time" >= 3) AND ("time" < 6))
5 | 7 | constraint_7 | (_timescaledb_functions.get_partition_hash(tag) >= 1073741823)
6 | 7 | constraint_7 | (_timescaledb_functions.get_partition_hash(tag) >= 1073741823)
6 | 8 | constraint_8 | (("time" >= 9) AND ("time" < 12))
(6 rows)
DELETE FROM _timescaledb_catalog.dimension_slice WHERE id = 5;
SELECT * FROM missing_slices;
dimension_slice_id | constraint_name | column_name | constraint_expr
--------------------+-----------------+-------------+----------------------------------
5 | constraint_5 | time | (("time" >= 3) AND ("time" < 6))
(1 row)
DROP TABLE chunk_test_int;
WARNING: unexpected state for chunk _timescaledb_internal._hyper_2_4_chunk, dropping anyway
WARNING: unexpected state for chunk _timescaledb_internal._hyper_2_5_chunk, dropping anyway