mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
The commit fixes two bugs in the repair scripts that could prevent an update in rare circumstances. For the 1.7.1--1.7.2 repair script: if there were several missing dimension slices in different hypertables with the same column name, the repair script would be confused on what constraint had what type and generate an error. For the 2.0.0-rc1--2.0.0-rc2 repair script: if a partition constraint was broken, it would generate an error rather than repairing the dimension slices because BIGINT_MIN would be cast to a double float and then an attempt would be made to cast it back to bigint, causing an overflow error. This commit also creates an update repair test that breaks a few tables for pre-2.0 versions to ensure that the repair script actually fixes them. The integrity check for the update tests already contain a check that dimension slices are valid, so there is no need to add a test for that. This commit adds an extra dimension in the workflow to test updates with repair and run that separately. It also changes the update test scripts to by default run without repair tests and add the additional option `-r` for running repair tests in addition to the normal tests. Fixes #2824
23 lines
956 B
SQL
23 lines
956 B
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
\echo **** Missing dimension slices ****
|
|
SELECT hypertable_id,
|
|
(
|
|
SELECT format('%I.%I', schema_name, table_name)::regclass
|
|
FROM _timescaledb_catalog.hypertable ht
|
|
WHERE ht.id = ch.hypertable_id
|
|
) AS hypertable,
|
|
chunk_id,
|
|
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);
|