-
Notifications
You must be signed in to change notification settings - Fork 897
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix handling of chunks with no contraints
When a catalog corruption occurs, and a chunk does not contain any dimension slices, we crash in ts_dimension_slice_cmp(). This patch adds a proper check and errors out before the code path is called.
- Loading branch information
1 parent
ea22843
commit c4ebdf6
Showing
5 changed files
with
73 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Fixes: #6816 Fix handling of chunks with no contraints |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
-- 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. | ||
\c :TEST_DBNAME :ROLE_SUPERUSER | ||
--- Test handling of missing dimension slices | ||
CREATE TABLE dim_test(time TIMESTAMPTZ, device int); | ||
SELECT create_hypertable('dim_test', 'time', chunk_time_interval => INTERVAL '1 day'); | ||
NOTICE: adding not-null constraint to column "time" | ||
create_hypertable | ||
----------------------- | ||
(1,public,dim_test,t) | ||
(1 row) | ||
|
||
-- Create two chunks | ||
INSERT INTO dim_test values('2000-01-01 00:00:00', 1); | ||
INSERT INTO dim_test values('2020-01-01 00:00:00', 1); | ||
SELECT id AS dim_slice_id FROM _timescaledb_catalog.dimension_slice | ||
ORDER BY id DESC LIMIT 1 | ||
\gset | ||
-- Delete the dimension slice for the second chunk | ||
DELETE FROM _timescaledb_catalog.chunk_constraint WHERE dimension_slice_id = :dim_slice_id; | ||
\set ON_ERROR_STOP 0 | ||
-- Select data | ||
SELECT * FROM dim_test; | ||
ERROR: chunk _hyper_1_2_chunk has no dimension slices | ||
-- Select data using ordered append | ||
SELECT * FROM dim_test ORDER BY time; | ||
ERROR: chunk _hyper_1_2_chunk has no dimension slices | ||
\set ON_ERROR_STOP 1 | ||
DROP TABLE dim_test; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
-- 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. | ||
|
||
\c :TEST_DBNAME :ROLE_SUPERUSER | ||
|
||
--- Test handling of missing dimension slices | ||
CREATE TABLE dim_test(time TIMESTAMPTZ, device int); | ||
SELECT create_hypertable('dim_test', 'time', chunk_time_interval => INTERVAL '1 day'); | ||
|
||
-- Create two chunks | ||
INSERT INTO dim_test values('2000-01-01 00:00:00', 1); | ||
INSERT INTO dim_test values('2020-01-01 00:00:00', 1); | ||
|
||
SELECT id AS dim_slice_id FROM _timescaledb_catalog.dimension_slice | ||
ORDER BY id DESC LIMIT 1 | ||
\gset | ||
|
||
-- Delete the dimension slice for the second chunk | ||
DELETE FROM _timescaledb_catalog.chunk_constraint WHERE dimension_slice_id = :dim_slice_id; | ||
|
||
\set ON_ERROR_STOP 0 | ||
|
||
-- Select data | ||
SELECT * FROM dim_test; | ||
|
||
-- Select data using ordered append | ||
SELECT * FROM dim_test ORDER BY time; | ||
|
||
\set ON_ERROR_STOP 1 | ||
|
||
DROP TABLE dim_test; | ||
|