diff --git a/src/nodes/hypertable_modify.c b/src/nodes/hypertable_modify.c index 9bc2c473d72..7033f8b6fd2 100644 --- a/src/nodes/hypertable_modify.c +++ b/src/nodes/hypertable_modify.c @@ -127,7 +127,7 @@ hypertable_modify_begin(CustomScanState *node, EState *estate, int eflags) * we need to set the hypertable as the rootRelation otherwise * statement trigger defined only on the hypertable will not fire. */ - if (mt->operation == CMD_DELETE) + if (mt->operation == CMD_DELETE || mt->operation == CMD_UPDATE) mt->rootRelation = mt->nominalRelation; ps = ExecInitNode(&mt->plan, estate, eflags); diff --git a/src/planner.c b/src/planner.c index 2516cb203ea..0b240e21336 100644 --- a/src/planner.c +++ b/src/planner.c @@ -1042,19 +1042,6 @@ timescaledb_set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, Index rti, Rang switch (reltype) { case TS_REL_HYPERTABLE_CHILD: - /* When postgres expands an inheritance tree it also adds the - * parent hypertable as child relation. Since for a hypertable the - * parent will never have any data we can mark this relation as - * dummy relation so it gets ignored in later steps. This is only - * relevant for code paths that use the postgres inheritance code - * as we don't include the hypertable as child when expanding the - * hypertable ourself. - * We do exclude distributed hypertables for now to not alter - * the trigger behaviour on access nodes, which would otherwise - * no longer fire. - */ - if (root->parse->commandType == CMD_DELETE && !hypertable_is_distributed(ht)) - mark_dummy_rel(rel); break; case TS_REL_CHUNK: case TS_REL_CHUNK_CHILD: @@ -1163,6 +1150,20 @@ timescaledb_get_relation_info_hook(PlannerInfo *root, Oid relation_objectid, boo break; } case TS_REL_HYPERTABLE_CHILD: + /* When postgres expands an inheritance tree it also adds the + * parent hypertable as child relation. Since for a hypertable the + * parent will never have any data we can mark this relation as + * dummy relation so it gets ignored in later steps. This is only + * relevant for code paths that use the postgres inheritance code + * as we don't include the hypertable as child when expanding the + * hypertable ourself. + * We do exclude distributed hypertables for now to not alter + * the trigger behaviour on access nodes, which would otherwise + * no longer fire. + */ + if (IS_UPDL_CMD(root->parse) && !hypertable_is_distributed(ht)) + mark_dummy_rel(rel); + break; case TS_REL_OTHER: break; } diff --git a/test/expected/cursor.out b/test/expected/cursor-12.out similarity index 89% rename from test/expected/cursor.out rename to test/expected/cursor-12.out index 2c1b92625fa..c41e60a05dc 100644 --- a/test/expected/cursor.out +++ b/test/expected/cursor-12.out @@ -21,14 +21,9 @@ FETCH NEXT FROM c1; Sat Jan 01 00:00:00 2000 PST | 1 | 0.5 (1 row) --- this will produce an error because PostgreSQL checks +-- this will produce an error on PG < 14 because PostgreSQL checks -- for the existence of a scan node with the relation id for every relation -- used in the update plan in the plan of the cursor. --- --- constraint exclusion will make this easier to hit --- because constraint exclusion only works for SELECT --- and UPDATE statements will still have parent tables in --- the generated plans UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; ERROR: cursor "c1" is not a simply updatable scan of table "cursor_test" COMMIT; diff --git a/test/expected/cursor-13.out b/test/expected/cursor-13.out new file mode 100644 index 00000000000..c41e60a05dc --- /dev/null +++ b/test/expected/cursor-13.out @@ -0,0 +1,53 @@ +-- 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. +CREATE TABLE cursor_test(time timestamptz, device_id int, temp float); +SELECT create_hypertable('cursor_test','time'); +NOTICE: adding not-null constraint to column "time" + create_hypertable +-------------------------- + (1,public,cursor_test,t) +(1 row) + +INSERT INTO cursor_test SELECT '2000-01-01',1,0.5; +INSERT INTO cursor_test SELECT '2001-01-01',1,0.5; +INSERT INTO cursor_test SELECT '2002-01-01',1,0.5; +\set ON_ERROR_STOP 0 +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test; +FETCH NEXT FROM c1; + time | device_id | temp +------------------------------+-----------+------ + Sat Jan 01 00:00:00 2000 PST | 1 | 0.5 +(1 row) + +-- this will produce an error on PG < 14 because PostgreSQL checks +-- for the existence of a scan node with the relation id for every relation +-- used in the update plan in the plan of the cursor. +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +ERROR: cursor "c1" is not a simply updatable scan of table "cursor_test" +COMMIT; +-- test cursor with no chunks left after runtime exclusion +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > now(); +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +ERROR: cursor "c1" is not a simply updatable scan of table "cursor_test" +COMMIT; +-- test cursor with no chunks left after planning exclusion +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > '2010-01-01'; +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +ERROR: cursor "c1" is not a simply updatable scan of table "cursor_test" +COMMIT; +\set ON_ERROR_STOP 1 +SET timescaledb.enable_constraint_exclusion TO off; +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test; +FETCH NEXT FROM c1; + time | device_id | temp +------------------------------+-----------+------ + Sat Jan 01 00:00:00 2000 PST | 1 | 0.5 +(1 row) + +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +COMMIT; diff --git a/test/expected/cursor-14.out b/test/expected/cursor-14.out new file mode 100644 index 00000000000..fb991bcb41f --- /dev/null +++ b/test/expected/cursor-14.out @@ -0,0 +1,52 @@ +-- 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. +CREATE TABLE cursor_test(time timestamptz, device_id int, temp float); +SELECT create_hypertable('cursor_test','time'); +NOTICE: adding not-null constraint to column "time" + create_hypertable +-------------------------- + (1,public,cursor_test,t) +(1 row) + +INSERT INTO cursor_test SELECT '2000-01-01',1,0.5; +INSERT INTO cursor_test SELECT '2001-01-01',1,0.5; +INSERT INTO cursor_test SELECT '2002-01-01',1,0.5; +\set ON_ERROR_STOP 0 +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test; +FETCH NEXT FROM c1; + time | device_id | temp +------------------------------+-----------+------ + Sat Jan 01 00:00:00 2000 PST | 1 | 0.5 +(1 row) + +-- this will produce an error on PG < 14 because PostgreSQL checks +-- for the existence of a scan node with the relation id for every relation +-- used in the update plan in the plan of the cursor. +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +COMMIT; +-- test cursor with no chunks left after runtime exclusion +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > now(); +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +ERROR: cursor "c1" is not a simply updatable scan of table "_hyper_1_1_chunk" +COMMIT; +-- test cursor with no chunks left after planning exclusion +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test WHERE time > '2010-01-01'; +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +ERROR: cursor "c1" is not a simply updatable scan of table "_hyper_1_1_chunk" +COMMIT; +\set ON_ERROR_STOP 1 +SET timescaledb.enable_constraint_exclusion TO off; +BEGIN; +DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test; +FETCH NEXT FROM c1; + time | device_id | temp +------------------------------+-----------+------ + Sat Jan 01 00:00:00 2000 PST | 1 | 0.7 +(1 row) + +UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; +COMMIT; diff --git a/test/expected/rowsecurity-14.out b/test/expected/rowsecurity-14.out index 37eec13326f..317cd8eaaac 100644 --- a/test/expected/rowsecurity-14.out +++ b/test/expected/rowsecurity-14.out @@ -2269,16 +2269,13 @@ EXPLAIN (COSTS OFF) UPDATE bv1 SET b = 'yyy' WHERE a = 4 AND f_leak(b); ----------------------------------------------------------------------------------------- Custom Scan (HypertableModify) -> Update on b1 - Update on b1 b1_1 - Update on _hyper_8_41_chunk b1_2 + Update on _hyper_8_41_chunk b1_1 -> Custom Scan (ChunkAppend) on b1 Chunks excluded during startup: 0 - -> Seq Scan on b1 b1_1 - Filter: ((a > 0) AND (a = 4) AND ((a % 2) = 0) AND f_leak(b)) - -> Index Scan using _hyper_8_41_chunk_b1_a_idx on _hyper_8_41_chunk b1_2 + -> Index Scan using _hyper_8_41_chunk_b1_a_idx on _hyper_8_41_chunk b1_1 Index Cond: ((a > 0) AND (a = 4)) Filter: (((a % 2) = 0) AND f_leak(b)) -(11 rows) +(8 rows) UPDATE bv1 SET b = 'yyy' WHERE a = 4 AND f_leak(b); NOTICE: f_leak => a87ff679a2f3e71d9181a67b7542122c @@ -4353,20 +4350,15 @@ SELECT * FROM current_check; -- Plan should be a subquery TID scan EXPLAIN (COSTS OFF) UPDATE current_check SET payload = payload WHERE CURRENT OF current_check_cursor; - QUERY PLAN -------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------- Custom Scan (HypertableModify) -> Update on current_check - Update on current_check current_check_1 - Update on _hyper_21_104_chunk current_check_2 - -> Append - -> Tid Scan on current_check current_check_1 - TID Cond: CURRENT OF current_check_cursor - Filter: ((currentid = 4) AND ((currentid % 2) = 0)) - -> Tid Scan on _hyper_21_104_chunk current_check_2 - TID Cond: CURRENT OF current_check_cursor - Filter: ((currentid = 4) AND ((currentid % 2) = 0)) -(11 rows) + Update on _hyper_21_104_chunk current_check_1 + -> Tid Scan on _hyper_21_104_chunk current_check_1 + TID Cond: CURRENT OF current_check_cursor + Filter: ((currentid = 4) AND ((currentid % 2) = 0)) +(6 rows) -- Similarly can only delete row 4 FETCH ABSOLUTE 1 FROM current_check_cursor; diff --git a/test/expected/update-12.out b/test/expected/update-12.out index 441a915f461..6761975d707 100644 --- a/test/expected/update-12.out +++ b/test/expected/update-12.out @@ -89,12 +89,10 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ Update on _hyper_1_2_chunk Update on _hyper_1_3_chunk -> Hash Join - Hash Cond: ("one_Partition_1".series_1 = "one_Partition".series_1) + Hash Cond: (_hyper_1_1_chunk_1.series_1 = "one_Partition".series_1) -> HashAggregate - Group Key: "one_Partition_1".series_1 + Group Key: _hyper_1_1_chunk_1.series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_1" - Filter: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk _hyper_1_1_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk _hyper_1_2_chunk_1 @@ -104,14 +102,12 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> Hash -> Seq Scan on "one_Partition" -> Hash Join - Hash Cond: (_hyper_1_1_chunk.series_1 = "one_Partition_1".series_1) + Hash Cond: (_hyper_1_1_chunk.series_1 = _hyper_1_1_chunk_1.series_1) -> Seq Scan on _hyper_1_1_chunk -> Hash -> HashAggregate - Group Key: "one_Partition_1".series_1 + Group Key: _hyper_1_1_chunk_1.series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_1" - Filter: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk _hyper_1_1_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk _hyper_1_2_chunk_1 @@ -119,14 +115,12 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk _hyper_1_3_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Hash Join - Hash Cond: (_hyper_1_2_chunk.series_1 = "one_Partition_1".series_1) + Hash Cond: (_hyper_1_2_chunk.series_1 = _hyper_1_1_chunk_1.series_1) -> Seq Scan on _hyper_1_2_chunk -> Hash -> HashAggregate - Group Key: "one_Partition_1".series_1 + Group Key: _hyper_1_1_chunk_1.series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_1" - Filter: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk _hyper_1_1_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk _hyper_1_2_chunk_1 @@ -134,21 +128,19 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk _hyper_1_3_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Hash Join - Hash Cond: (_hyper_1_3_chunk.series_1 = "one_Partition_1".series_1) + Hash Cond: (_hyper_1_3_chunk.series_1 = _hyper_1_1_chunk_1.series_1) -> Seq Scan on _hyper_1_3_chunk -> Hash -> HashAggregate - Group Key: "one_Partition_1".series_1 + Group Key: _hyper_1_1_chunk_1.series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_1" - Filter: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk _hyper_1_1_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk _hyper_1_2_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk _hyper_1_3_chunk_1 Index Cond: (series_1 > (series_val())::double precision) -(65 rows) +(57 rows) SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2; timeCustom | device_id | series_0 | series_1 | series_2 | series_bool diff --git a/test/expected/update-13.out b/test/expected/update-13.out index 163c125488d..cc1c5bde8c3 100644 --- a/test/expected/update-13.out +++ b/test/expected/update-13.out @@ -93,13 +93,11 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> HashAggregate Group Key: "one_Partition".series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_5" - Filter: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_6" + -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_7" + -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_8" + -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7" Index Cond: (series_1 > (series_val())::double precision) -> Hash -> Seq Scan on "one_Partition" "one_Partition_1" @@ -110,13 +108,11 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> HashAggregate Group Key: "one_Partition".series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_5" - Filter: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_6" + -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_7" + -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_8" + -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7" Index Cond: (series_1 > (series_val())::double precision) -> Hash Join Hash Cond: ("one_Partition_3".series_1 = "one_Partition".series_1) @@ -125,13 +121,11 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> HashAggregate Group Key: "one_Partition".series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_5" - Filter: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_6" + -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_7" + -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_8" + -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7" Index Cond: (series_1 > (series_val())::double precision) -> Hash Join Hash Cond: ("one_Partition_4".series_1 = "one_Partition".series_1) @@ -140,15 +134,13 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ -> HashAggregate Group Key: "one_Partition".series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_5" - Filter: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_6" + -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_7" + -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_8" + -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7" Index Cond: (series_1 > (series_val())::double precision) -(65 rows) +(57 rows) SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2; timeCustom | device_id | series_0 | series_1 | series_2 | series_bool diff --git a/test/expected/update-14.out b/test/expected/update-14.out index 8684955439f..e689bc1a67d 100644 --- a/test/expected/update-14.out +++ b/test/expected/update-14.out @@ -85,30 +85,26 @@ WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_ ----------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) -> Update on "one_Partition" - Update on "one_Partition" "one_Partition_2" - Update on _hyper_1_1_chunk "one_Partition_3" - Update on _hyper_1_2_chunk "one_Partition_4" - Update on _hyper_1_3_chunk "one_Partition_5" + Update on _hyper_1_1_chunk "one_Partition_2" + Update on _hyper_1_2_chunk "one_Partition_3" + Update on _hyper_1_3_chunk "one_Partition_4" -> Hash Join Hash Cond: ("one_Partition".series_1 = "one_Partition_1".series_1) -> Append - -> Seq Scan on "one_Partition" "one_Partition_2" - -> Seq Scan on _hyper_1_1_chunk "one_Partition_3" - -> Seq Scan on _hyper_1_2_chunk "one_Partition_4" - -> Seq Scan on _hyper_1_3_chunk "one_Partition_5" + -> Seq Scan on _hyper_1_1_chunk "one_Partition_2" + -> Seq Scan on _hyper_1_2_chunk "one_Partition_3" + -> Seq Scan on _hyper_1_3_chunk "one_Partition_4" -> Hash -> HashAggregate Group Key: "one_Partition_1".series_1 -> Append - -> Seq Scan on "one_Partition" "one_Partition_6" - Filter: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_7" + -> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_8" + -> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6" Index Cond: (series_1 > (series_val())::double precision) - -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_9" + -> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7" Index Cond: (series_1 > (series_val())::double precision) -(25 rows) +(21 rows) SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2; timeCustom | device_id | series_0 | series_1 | series_2 | series_bool diff --git a/test/sql/.gitignore b/test/sql/.gitignore index 9ac6c04ef5c..5fd5f903756 100644 --- a/test/sql/.gitignore +++ b/test/sql/.gitignore @@ -3,6 +3,7 @@ /append-*.sql /cluster-*.sql /constraint-*.sql +/cursor-*.sql /copy-*.sql /ddl-*.sql /delete-*.sql diff --git a/test/sql/CMakeLists.txt b/test/sql/CMakeLists.txt index ab27fe10b05..f263230efaf 100644 --- a/test/sql/CMakeLists.txt +++ b/test/sql/CMakeLists.txt @@ -10,7 +10,6 @@ set(TEST_FILES create_chunks.sql create_hypertable.sql create_table.sql - cursor.sql ddl_errors.sql drop_extension.sql drop_hypertable.sql @@ -61,6 +60,7 @@ set(TEST_TEMPLATES cluster.sql.in constraint.sql.in copy.sql.in + cursor.sql.in ddl.sql.in delete.sql.in partitionwise.sql.in diff --git a/test/sql/cursor.sql b/test/sql/cursor.sql.in similarity index 84% rename from test/sql/cursor.sql rename to test/sql/cursor.sql.in index 2acacbf731c..bea60827a3c 100644 --- a/test/sql/cursor.sql +++ b/test/sql/cursor.sql.in @@ -13,14 +13,9 @@ INSERT INTO cursor_test SELECT '2002-01-01',1,0.5; BEGIN; DECLARE c1 SCROLL CURSOR FOR SELECT * FROM cursor_test; FETCH NEXT FROM c1; --- this will produce an error because PostgreSQL checks +-- this will produce an error on PG < 14 because PostgreSQL checks -- for the existence of a scan node with the relation id for every relation -- used in the update plan in the plan of the cursor. --- --- constraint exclusion will make this easier to hit --- because constraint exclusion only works for SELECT --- and UPDATE statements will still have parent tables in --- the generated plans UPDATE cursor_test SET temp = 0.7 WHERE CURRENT OF c1; COMMIT; diff --git a/tsl/test/expected/modify_exclusion.out b/tsl/test/expected/modify_exclusion.out index 411aa9a3cac..d92caa2157e 100644 --- a/tsl/test/expected/modify_exclusion.out +++ b/tsl/test/expected/modify_exclusion.out @@ -182,58 +182,43 @@ BEGIN; ROLLBACK; BEGIN; :PREFIX UPDATE metrics_int2 SET value = 0.5 WHERE time = 15; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------ Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int2 (actual rows=0 loops=1) - Update on public.metrics_int2 metrics_int2_1 - Update on _timescaledb_internal._hyper_1_9_chunk metrics_int2_2 + Update on _timescaledb_internal._hyper_1_9_chunk metrics_int2_1 -> Result (actual rows=0 loops=1) - Output: '0.5'::double precision, metrics_int2.tableoid, metrics_int2.ctid - -> Append (actual rows=0 loops=1) - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) - Output: metrics_int2_1.tableoid, metrics_int2_1.ctid - Filter: (metrics_int2_1."time" = 15) - -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_2 (actual rows=0 loops=1) - Output: metrics_int2_2.tableoid, metrics_int2_2.ctid - Index Cond: (metrics_int2_2."time" = 15) -(13 rows) + Output: '0.5'::double precision, metrics_int2_1.tableoid, metrics_int2_1.ctid + -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_1 (actual rows=0 loops=1) + Output: metrics_int2_1.tableoid, metrics_int2_1.ctid + Index Cond: (metrics_int2_1."time" = 15) +(8 rows) :PREFIX UPDATE metrics_int4 SET value = 0.5 WHERE time = 15; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 (actual rows=0 loops=1) - Update on public.metrics_int4 metrics_int4_1 - Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_1 -> Result (actual rows=0 loops=1) - Output: '0.5'::double precision, metrics_int4.tableoid, metrics_int4.ctid - -> Append (actual rows=0 loops=1) - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) - Output: metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" = 15) - -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 (actual rows=0 loops=1) - Output: metrics_int4_2.tableoid, metrics_int4_2.ctid - Index Cond: (metrics_int4_2."time" = 15) -(13 rows) + Output: '0.5'::double precision, metrics_int4_1.tableoid, metrics_int4_1.ctid + -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_1 (actual rows=0 loops=1) + Output: metrics_int4_1.tableoid, metrics_int4_1.ctid + Index Cond: (metrics_int4_1."time" = 15) +(8 rows) :PREFIX UPDATE metrics_int8 SET value = 0.5 WHERE time = 15; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int8 (actual rows=0 loops=1) - Update on public.metrics_int8 metrics_int8_1 - Update on _timescaledb_internal._hyper_3_11_chunk metrics_int8_2 + Update on _timescaledb_internal._hyper_3_11_chunk metrics_int8_1 -> Result (actual rows=0 loops=1) - Output: '0.5'::double precision, metrics_int8.tableoid, metrics_int8.ctid - -> Append (actual rows=0 loops=1) - -> Seq Scan on public.metrics_int8 metrics_int8_1 (actual rows=0 loops=1) - Output: metrics_int8_1.tableoid, metrics_int8_1.ctid - Filter: (metrics_int8_1."time" = 15) - -> Index Scan using _hyper_3_11_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_11_chunk metrics_int8_2 (actual rows=0 loops=1) - Output: metrics_int8_2.tableoid, metrics_int8_2.ctid - Index Cond: (metrics_int8_2."time" = 15) -(13 rows) + Output: '0.5'::double precision, metrics_int8_1.tableoid, metrics_int8_1.ctid + -> Index Scan using _hyper_3_11_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_11_chunk metrics_int8_1 (actual rows=0 loops=1) + Output: metrics_int8_1.tableoid, metrics_int8_1.ctid + Index Cond: (metrics_int8_1."time" = 15) +(8 rows) ROLLBACK; -- stable constraints @@ -301,69 +286,57 @@ BEGIN; -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int2 (actual rows=0 loops=1) - Update on public.metrics_int2 metrics_int2_1 Update on _timescaledb_internal._hyper_1_1_chunk metrics_int2 Update on _timescaledb_internal._hyper_1_9_chunk metrics_int2 - Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 + Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 Update on _timescaledb_internal._hyper_1_25_chunk metrics_int2 -> Custom Scan (ChunkAppend) on public.metrics_int2 (actual rows=0 loops=1) Output: '0.3'::double precision, metrics_int2.tableoid, metrics_int2.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 (actual rows=0 loops=1) Output: metrics_int2_1.tableoid, metrics_int2_1.ctid - Filter: (metrics_int2_1."time" = length("substring"(version(), 1, 23))) - -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 (actual rows=0 loops=1) - Output: metrics_int2_2.tableoid, metrics_int2_2.ctid - Index Cond: (metrics_int2_2."time" = length("substring"(version(), 1, 23))) -(18 rows) + Index Cond: (metrics_int2_1."time" = length("substring"(version(), 1, 23))) +(14 rows) :PREFIX UPDATE metrics_int4 SET value = 0.3 WHERE time = length(substring(version(),1,23)); QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 (actual rows=0 loops=1) - Update on public.metrics_int4 metrics_int4_1 Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4 Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4 -> Custom Scan (ChunkAppend) on public.metrics_int4 (actual rows=0 loops=1) Output: '0.3'::double precision, metrics_int4.tableoid, metrics_int4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 (actual rows=0 loops=1) Output: metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" = length("substring"(version(), 1, 23))) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 (actual rows=0 loops=1) - Output: metrics_int4_2.tableoid, metrics_int4_2.ctid - Index Cond: (metrics_int4_2."time" = length("substring"(version(), 1, 23))) -(18 rows) + Index Cond: (metrics_int4_1."time" = length("substring"(version(), 1, 23))) +(14 rows) :PREFIX UPDATE metrics_int8 SET value = 0.3 WHERE time = length(substring(version(),1,23)); QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int8 (actual rows=0 loops=1) - Update on public.metrics_int8 metrics_int8_1 Update on _timescaledb_internal._hyper_3_3_chunk metrics_int8 Update on _timescaledb_internal._hyper_3_11_chunk metrics_int8 - Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 + Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 Update on _timescaledb_internal._hyper_3_27_chunk metrics_int8 -> Custom Scan (ChunkAppend) on public.metrics_int8 (actual rows=0 loops=1) Output: '0.3'::double precision, metrics_int8.tableoid, metrics_int8.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int8 metrics_int8_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 (actual rows=0 loops=1) Output: metrics_int8_1.tableoid, metrics_int8_1.ctid - Filter: (metrics_int8_1."time" = length("substring"(version(), 1, 23))) - -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 (actual rows=0 loops=1) - Output: metrics_int8_2.tableoid, metrics_int8_2.ctid - Index Cond: (metrics_int8_2."time" = length("substring"(version(), 1, 23))) -(18 rows) + Index Cond: (metrics_int8_1."time" = length("substring"(version(), 1, 23))) +(14 rows) ROLLBACK; -- should have ChunkAppend since constraint is stable @@ -435,76 +408,64 @@ BEGIN; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int2_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int2 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int2_1."time" - Update on public.metrics_int2 metrics_int2_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_1_1_chunk metrics_int2 Update on _timescaledb_internal._hyper_1_9_chunk metrics_int2 - Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 + Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 Update on _timescaledb_internal._hyper_1_25_chunk metrics_int2 -> Custom Scan (ChunkAppend) on public.metrics_int2 (actual rows=1 loops=1) Output: '0.4'::double precision, metrics_int2.tableoid, metrics_int2.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 (actual rows=1 loops=1) Output: metrics_int2_1.tableoid, metrics_int2_1.ctid - Filter: (metrics_int2_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 (actual rows=1 loops=1) - Output: metrics_int2_2.tableoid, metrics_int2_2.ctid - Index Cond: (metrics_int2_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int2_1."time" = length("substring"(version(), 1, 20))) +(16 rows) :PREFIX UPDATE metrics_int4 SET value = 0.4 WHERE time = length(substring(version(),1,20)) RETURNING 'returning', time; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int4_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int4 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int4_1."time" - Update on public.metrics_int4 metrics_int4_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4 Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4 -> Custom Scan (ChunkAppend) on public.metrics_int4 (actual rows=1 loops=1) Output: '0.4'::double precision, metrics_int4.tableoid, metrics_int4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 (actual rows=1 loops=1) Output: metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 (actual rows=1 loops=1) - Output: metrics_int4_2.tableoid, metrics_int4_2.ctid - Index Cond: (metrics_int4_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int4_1."time" = length("substring"(version(), 1, 20))) +(16 rows) :PREFIX UPDATE metrics_int8 SET value = 0.4 WHERE time = length(substring(version(),1,20)) RETURNING 'returning', time; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int8_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int8 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int8_1."time" - Update on public.metrics_int8 metrics_int8_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_3_3_chunk metrics_int8 Update on _timescaledb_internal._hyper_3_11_chunk metrics_int8 - Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 + Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 Update on _timescaledb_internal._hyper_3_27_chunk metrics_int8 -> Custom Scan (ChunkAppend) on public.metrics_int8 (actual rows=1 loops=1) Output: '0.4'::double precision, metrics_int8.tableoid, metrics_int8.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int8 metrics_int8_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 (actual rows=1 loops=1) Output: metrics_int8_1.tableoid, metrics_int8_1.ctid - Filter: (metrics_int8_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 (actual rows=1 loops=1) - Output: metrics_int8_2.tableoid, metrics_int8_2.ctid - Index Cond: (metrics_int8_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int8_1."time" = length("substring"(version(), 1, 20))) +(16 rows) ROLLBACK; BEGIN; @@ -512,76 +473,64 @@ BEGIN; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int2_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int2 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int2_1."time" - Update on public.metrics_int2 metrics_int2_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_1_1_chunk metrics_int2 Update on _timescaledb_internal._hyper_1_9_chunk metrics_int2 - Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 + Update on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 Update on _timescaledb_internal._hyper_1_25_chunk metrics_int2 -> Custom Scan (ChunkAppend) on public.metrics_int2 (actual rows=1 loops=1) Output: ('0.1'::double precision * metrics_int2.value), 'update'::text, metrics_int2.tableoid, metrics_int2.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_1 (actual rows=1 loops=1) Output: metrics_int2_1.value, metrics_int2_1.tableoid, metrics_int2_1.ctid - Filter: (metrics_int2_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_2 (actual rows=1 loops=1) - Output: metrics_int2_2.value, metrics_int2_2.tableoid, metrics_int2_2.ctid - Index Cond: (metrics_int2_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int2_1."time" = length("substring"(version(), 1, 20))) +(16 rows) :PREFIX UPDATE metrics_int4 SET value = 0.1 * value, data = 'update' WHERE time = length(substring(version(),1,20)) RETURNING 'returning', time; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int4_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int4 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int4_1."time" - Update on public.metrics_int4 metrics_int4_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4 Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4 -> Custom Scan (ChunkAppend) on public.metrics_int4 (actual rows=1 loops=1) Output: ('0.1'::double precision * metrics_int4.value), 'update'::text, metrics_int4.tableoid, metrics_int4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_1 (actual rows=1 loops=1) Output: metrics_int4_1.value, metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_2 (actual rows=1 loops=1) - Output: metrics_int4_2.value, metrics_int4_2.tableoid, metrics_int4_2.ctid - Index Cond: (metrics_int4_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int4_1."time" = length("substring"(version(), 1, 20))) +(16 rows) :PREFIX UPDATE metrics_int8 SET value = 0.1 * value, data = 'update' WHERE time = length(substring(version(),1,20)) RETURNING 'returning', time; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=1 loops=1) - Output: ('returning'::text), metrics_int8_1."time" + Output: ('returning'::text), "time" -> Update on public.metrics_int8 (actual rows=1 loops=1) - Output: 'returning'::text, metrics_int8_1."time" - Update on public.metrics_int8 metrics_int8_1 + Output: 'returning'::text, "time" Update on _timescaledb_internal._hyper_3_3_chunk metrics_int8 Update on _timescaledb_internal._hyper_3_11_chunk metrics_int8 - Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 + Update on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 Update on _timescaledb_internal._hyper_3_27_chunk metrics_int8 -> Custom Scan (ChunkAppend) on public.metrics_int8 (actual rows=1 loops=1) Output: ('0.1'::double precision * metrics_int8.value), 'update'::text, metrics_int8.tableoid, metrics_int8.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_int8 metrics_int8_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_1 (actual rows=1 loops=1) Output: metrics_int8_1.value, metrics_int8_1.tableoid, metrics_int8_1.ctid - Filter: (metrics_int8_1."time" = length("substring"(version(), 1, 20))) - -> Index Scan using _hyper_3_19_chunk_metrics_int8_time_idx on _timescaledb_internal._hyper_3_19_chunk metrics_int8_2 (actual rows=1 loops=1) - Output: metrics_int8_2.value, metrics_int8_2.tableoid, metrics_int8_2.ctid - Index Cond: (metrics_int8_2."time" = length("substring"(version(), 1, 20))) -(20 rows) + Index Cond: (metrics_int8_1."time" = length("substring"(version(), 1, 20))) +(16 rows) ROLLBACK; -- immutable constraints @@ -656,102 +605,79 @@ BEGIN; ROLLBACK; BEGIN; :PREFIX UPDATE metrics_date SET value = 0.6 WHERE time = '2000-01-01'; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------ Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_date (actual rows=0 loops=1) - Update on public.metrics_date metrics_date_1 - Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 + Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 -> Result (actual rows=1 loops=1) - Output: '0.6'::double precision, metrics_date.tableoid, metrics_date.ctid - -> Append (actual rows=1 loops=1) - -> Seq Scan on public.metrics_date metrics_date_1 (actual rows=0 loops=1) - Output: metrics_date_1.tableoid, metrics_date_1.ctid - Filter: (metrics_date_1."time" = '01-01-2000'::date) - -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 (actual rows=1 loops=1) - Output: metrics_date_2.tableoid, metrics_date_2.ctid - Index Cond: (metrics_date_2."time" = '01-01-2000'::date) -(13 rows) + Output: '0.6'::double precision, metrics_date_1.tableoid, metrics_date_1.ctid + -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 (actual rows=1 loops=1) + Output: metrics_date_1.tableoid, metrics_date_1.ctid + Index Cond: (metrics_date_1."time" = '01-01-2000'::date) +(8 rows) :PREFIX UPDATE metrics_timestamp SET value = 0.6 WHERE time = '2000-01-01'; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_timestamp (actual rows=0 loops=1) - Update on public.metrics_timestamp metrics_timestamp_1 - Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 + Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 -> Result (actual rows=1 loops=1) - Output: '0.6'::double precision, metrics_timestamp.tableoid, metrics_timestamp.ctid - -> Append (actual rows=1 loops=1) - -> Seq Scan on public.metrics_timestamp metrics_timestamp_1 (actual rows=0 loops=1) - Output: metrics_timestamp_1.tableoid, metrics_timestamp_1.ctid - Filter: (metrics_timestamp_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) - -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 (actual rows=1 loops=1) - Output: metrics_timestamp_2.tableoid, metrics_timestamp_2.ctid - Index Cond: (metrics_timestamp_2."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) -(13 rows) + Output: '0.6'::double precision, metrics_timestamp_1.tableoid, metrics_timestamp_1.ctid + -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 (actual rows=1 loops=1) + Output: metrics_timestamp_1.tableoid, metrics_timestamp_1.ctid + Index Cond: (metrics_timestamp_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) +(8 rows) :PREFIX UPDATE metrics_timestamptz SET value = 0.6 WHERE time = '2000-01-01'; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_timestamptz (actual rows=0 loops=1) - Update on public.metrics_timestamptz metrics_timestamptz_1 - Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 + Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 -> Result (actual rows=1 loops=1) - Output: '0.6'::double precision, metrics_timestamptz.tableoid, metrics_timestamptz.ctid - -> Append (actual rows=1 loops=1) - -> Seq Scan on public.metrics_timestamptz metrics_timestamptz_1 (actual rows=0 loops=1) - Output: metrics_timestamptz_1.tableoid, metrics_timestamptz_1.ctid - Filter: (metrics_timestamptz_1."time" = 'Sat Jan 01 00:00:00 2000 PST'::timestamp with time zone) - -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 (actual rows=1 loops=1) - Output: metrics_timestamptz_2.tableoid, metrics_timestamptz_2.ctid - Index Cond: (metrics_timestamptz_2."time" = 'Sat Jan 01 00:00:00 2000 PST'::timestamp with time zone) -(13 rows) + Output: '0.6'::double precision, metrics_timestamptz_1.tableoid, metrics_timestamptz_1.ctid + -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 (actual rows=1 loops=1) + Output: metrics_timestamptz_1.tableoid, metrics_timestamptz_1.ctid + Index Cond: (metrics_timestamptz_1."time" = 'Sat Jan 01 00:00:00 2000 PST'::timestamp with time zone) +(8 rows) :PREFIX UPDATE metrics_space SET value = 0.6 WHERE time = '2000-01-01' AND device = '1'; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_space (actual rows=0 loops=1) - Update on public.metrics_space metrics_space_1 - Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 - Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 + Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 + Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 -> Result (actual rows=1 loops=1) Output: '0.6'::double precision, metrics_space.tableoid, metrics_space.ctid -> Append (actual rows=1 loops=1) - -> Seq Scan on public.metrics_space metrics_space_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 (actual rows=1 loops=1) Output: metrics_space_1.tableoid, metrics_space_1.ctid - Filter: ((metrics_space_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) AND (metrics_space_1.device = '1'::text)) - -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 (actual rows=1 loops=1) + Index Cond: ((metrics_space_1.device = '1'::text) AND (metrics_space_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone)) + -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 (actual rows=0 loops=1) Output: metrics_space_2.tableoid, metrics_space_2.ctid Index Cond: ((metrics_space_2.device = '1'::text) AND (metrics_space_2."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone)) - -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 (actual rows=0 loops=1) - Output: metrics_space_3.tableoid, metrics_space_3.ctid - Index Cond: ((metrics_space_3.device = '1'::text) AND (metrics_space_3."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone)) -(17 rows) +(13 rows) :PREFIX UPDATE metrics_space SET value = 0.6 WHERE time = '2000-01-01'; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_space (actual rows=0 loops=1) - Update on public.metrics_space metrics_space_1 - Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 - Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 + Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 + Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 -> Result (actual rows=2 loops=1) Output: '0.6'::double precision, metrics_space.tableoid, metrics_space.ctid -> Append (actual rows=2 loops=1) - -> Seq Scan on public.metrics_space metrics_space_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 (actual rows=1 loops=1) Output: metrics_space_1.tableoid, metrics_space_1.ctid - Filter: (metrics_space_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) - -> Index Scan using _hyper_7_7_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 (actual rows=1 loops=1) + Index Cond: (metrics_space_1."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) + -> Index Scan using _hyper_7_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 (actual rows=1 loops=1) Output: metrics_space_2.tableoid, metrics_space_2.ctid Index Cond: (metrics_space_2."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) - -> Index Scan using _hyper_7_8_chunk_metrics_space_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 (actual rows=1 loops=1) - Output: metrics_space_3.tableoid, metrics_space_3.ctid - Index Cond: (metrics_space_3."time" = 'Sat Jan 01 00:00:00 2000'::timestamp without time zone) -(17 rows) +(13 rows) ROLLBACK; -- stable constraints @@ -819,8 +745,7 @@ BEGIN; ------------------------------------------------------------------------------------------------------------------------------------------------------------ Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_date (actual rows=0 loops=1) - Update on public.metrics_date metrics_date_1 - Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 + Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 Update on _timescaledb_internal._hyper_4_12_chunk metrics_date Update on _timescaledb_internal._hyper_4_20_chunk metrics_date Update on _timescaledb_internal._hyper_4_28_chunk metrics_date @@ -829,21 +754,17 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_date metrics_date_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 (actual rows=1 loops=1) Output: metrics_date_1.tableoid, metrics_date_1.ctid - Filter: (metrics_date_1."time" = ('2000-01-01'::cstring)::date) - -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 (actual rows=1 loops=1) - Output: metrics_date_2.tableoid, metrics_date_2.ctid - Index Cond: (metrics_date_2."time" = ('2000-01-01'::cstring)::date) -(18 rows) + Index Cond: (metrics_date_1."time" = ('2000-01-01'::cstring)::date) +(14 rows) :PREFIX UPDATE metrics_timestamp SET value = 0.9 WHERE time = '2000-01-01'::text::timestamp; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_timestamp (actual rows=0 loops=1) - Update on public.metrics_timestamp metrics_timestamp_1 - Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 + Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 Update on _timescaledb_internal._hyper_5_13_chunk metrics_timestamp Update on _timescaledb_internal._hyper_5_21_chunk metrics_timestamp Update on _timescaledb_internal._hyper_5_29_chunk metrics_timestamp @@ -852,21 +773,17 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_timestamp metrics_timestamp_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 (actual rows=1 loops=1) Output: metrics_timestamp_1.tableoid, metrics_timestamp_1.ctid - Filter: (metrics_timestamp_1."time" = ('2000-01-01'::cstring)::timestamp without time zone) - -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 (actual rows=1 loops=1) - Output: metrics_timestamp_2.tableoid, metrics_timestamp_2.ctid - Index Cond: (metrics_timestamp_2."time" = ('2000-01-01'::cstring)::timestamp without time zone) -(18 rows) + Index Cond: (metrics_timestamp_1."time" = ('2000-01-01'::cstring)::timestamp without time zone) +(14 rows) :PREFIX UPDATE metrics_timestamptz SET value = 0.9 WHERE time = '2000-01-01'::text::timestamptz; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_timestamptz (actual rows=0 loops=1) - Update on public.metrics_timestamptz metrics_timestamptz_1 - Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 + Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 Update on _timescaledb_internal._hyper_6_14_chunk metrics_timestamptz Update on _timescaledb_internal._hyper_6_22_chunk metrics_timestamptz Update on _timescaledb_internal._hyper_6_30_chunk metrics_timestamptz @@ -875,13 +792,10 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_timestamptz metrics_timestamptz_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 (actual rows=1 loops=1) Output: metrics_timestamptz_1.tableoid, metrics_timestamptz_1.ctid - Filter: (metrics_timestamptz_1."time" = ('2000-01-01'::cstring)::timestamp with time zone) - -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 (actual rows=1 loops=1) - Output: metrics_timestamptz_2.tableoid, metrics_timestamptz_2.ctid - Index Cond: (metrics_timestamptz_2."time" = ('2000-01-01'::cstring)::timestamp with time zone) -(18 rows) + Index Cond: (metrics_timestamptz_1."time" = ('2000-01-01'::cstring)::timestamp with time zone) +(14 rows) ROLLBACK; -- space partitioning @@ -965,9 +879,8 @@ BEGIN; --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_space (actual rows=0 loops=1) - Update on public.metrics_space metrics_space_1 - Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 - Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 + Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 + Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 Update on _timescaledb_internal._hyper_7_15_chunk metrics_space Update on _timescaledb_internal._hyper_7_16_chunk metrics_space Update on _timescaledb_internal._hyper_7_23_chunk metrics_space @@ -979,16 +892,13 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 6 - -> Seq Scan on public.metrics_space metrics_space_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 (actual rows=1 loops=1) Output: metrics_space_1.tableoid, metrics_space_1.ctid - Filter: ((metrics_space_1.device = format('1'::text)) AND (metrics_space_1."time" = ('2000-01-01'::cstring)::timestamp with time zone)) - -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 (actual rows=1 loops=1) + Index Cond: ((metrics_space_1.device = format('1'::text)) AND (metrics_space_1."time" = ('2000-01-01'::cstring)::timestamp with time zone)) + -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 (actual rows=0 loops=1) Output: metrics_space_2.tableoid, metrics_space_2.ctid Index Cond: ((metrics_space_2.device = format('1'::text)) AND (metrics_space_2."time" = ('2000-01-01'::cstring)::timestamp with time zone)) - -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 (actual rows=0 loops=1) - Output: metrics_space_3.tableoid, metrics_space_3.ctid - Index Cond: ((metrics_space_3.device = format('1'::text)) AND (metrics_space_3."time" = ('2000-01-01'::cstring)::timestamp with time zone)) -(25 rows) +(21 rows) ROLLBACK; BEGIN; @@ -997,48 +907,44 @@ BEGIN; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_space (actual rows=0 loops=1) - Update on public.metrics_space metrics_space_1 - Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 - Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 - Update on _timescaledb_internal._hyper_7_15_chunk metrics_space_4 - Update on _timescaledb_internal._hyper_7_16_chunk metrics_space_5 - Update on _timescaledb_internal._hyper_7_23_chunk metrics_space_6 - Update on _timescaledb_internal._hyper_7_24_chunk metrics_space_7 - Update on _timescaledb_internal._hyper_7_31_chunk metrics_space_8 - Update on _timescaledb_internal._hyper_7_32_chunk metrics_space_9 + Update on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 + Update on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 + Update on _timescaledb_internal._hyper_7_15_chunk metrics_space_3 + Update on _timescaledb_internal._hyper_7_16_chunk metrics_space_4 + Update on _timescaledb_internal._hyper_7_23_chunk metrics_space_5 + Update on _timescaledb_internal._hyper_7_24_chunk metrics_space_6 + Update on _timescaledb_internal._hyper_7_31_chunk metrics_space_7 + Update on _timescaledb_internal._hyper_7_32_chunk metrics_space_8 -> Custom Scan (ChunkAppend) on public.metrics_space (actual rows=4 loops=1) Output: '0.1'::double precision, metrics_space.tableoid, metrics_space.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_space metrics_space_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_1 (actual rows=1 loops=1) Output: metrics_space_1.tableoid, metrics_space_1.ctid - Filter: (metrics_space_1.device = format('1'::text)) - -> Index Scan using _hyper_7_7_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_7_chunk metrics_space_2 (actual rows=1 loops=1) + Index Cond: (metrics_space_1.device = format('1'::text)) + -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_2 (actual rows=0 loops=1) Output: metrics_space_2.tableoid, metrics_space_2.ctid Index Cond: (metrics_space_2.device = format('1'::text)) - -> Index Scan using _hyper_7_8_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_8_chunk metrics_space_3 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_15_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_15_chunk metrics_space_3 (actual rows=1 loops=1) Output: metrics_space_3.tableoid, metrics_space_3.ctid Index Cond: (metrics_space_3.device = format('1'::text)) - -> Index Scan using _hyper_7_15_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_15_chunk metrics_space_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_7_16_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_16_chunk metrics_space_4 (actual rows=0 loops=1) Output: metrics_space_4.tableoid, metrics_space_4.ctid Index Cond: (metrics_space_4.device = format('1'::text)) - -> Index Scan using _hyper_7_16_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_16_chunk metrics_space_5 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_23_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_23_chunk metrics_space_5 (actual rows=1 loops=1) Output: metrics_space_5.tableoid, metrics_space_5.ctid Index Cond: (metrics_space_5.device = format('1'::text)) - -> Index Scan using _hyper_7_23_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_23_chunk metrics_space_6 (actual rows=1 loops=1) + -> Index Scan using _hyper_7_24_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_24_chunk metrics_space_6 (actual rows=0 loops=1) Output: metrics_space_6.tableoid, metrics_space_6.ctid Index Cond: (metrics_space_6.device = format('1'::text)) - -> Index Scan using _hyper_7_24_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_24_chunk metrics_space_7 (actual rows=0 loops=1) + -> Index Scan using _hyper_7_31_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_31_chunk metrics_space_7 (actual rows=1 loops=1) Output: metrics_space_7.tableoid, metrics_space_7.ctid Index Cond: (metrics_space_7.device = format('1'::text)) - -> Index Scan using _hyper_7_31_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_31_chunk metrics_space_8 (actual rows=1 loops=1) + -> Index Scan using _hyper_7_32_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_32_chunk metrics_space_8 (actual rows=0 loops=1) Output: metrics_space_8.tableoid, metrics_space_8.ctid Index Cond: (metrics_space_8.device = format('1'::text)) - -> Index Scan using _hyper_7_32_chunk_metrics_space_device_time_idx on _timescaledb_internal._hyper_7_32_chunk metrics_space_9 (actual rows=0 loops=1) - Output: metrics_space_9.tableoid, metrics_space_9.ctid - Index Cond: (metrics_space_9.device = format('1'::text)) -(43 rows) +(39 rows) ROLLBACK; -- should have ChunkAppend since constraint is stable @@ -1113,8 +1019,7 @@ BEGIN; Output: ('returning'::text), metrics_date_1."time" -> Update on public.metrics_date (actual rows=1 loops=1) Output: 'returning'::text, metrics_date_1."time" - Update on public.metrics_date metrics_date_1 - Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 + Update on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 Update on _timescaledb_internal._hyper_4_12_chunk metrics_date Update on _timescaledb_internal._hyper_4_20_chunk metrics_date Update on _timescaledb_internal._hyper_4_28_chunk metrics_date @@ -1123,13 +1028,10 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_date metrics_date_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_1 (actual rows=1 loops=1) Output: metrics_date_1.tableoid, metrics_date_1.ctid - Filter: (metrics_date_1."time" = ('2000-01-01'::cstring)::date) - -> Index Scan using _hyper_4_4_chunk_metrics_date_time_idx on _timescaledb_internal._hyper_4_4_chunk metrics_date_2 (actual rows=1 loops=1) - Output: metrics_date_2.tableoid, metrics_date_2.ctid - Index Cond: (metrics_date_2."time" = ('2000-01-01'::cstring)::date) -(20 rows) + Index Cond: (metrics_date_1."time" = ('2000-01-01'::cstring)::date) +(16 rows) :PREFIX UPDATE metrics_timestamp SET value = 0.2 WHERE time = '2000-01-01'::text::timestamp RETURNING 'returning', time; QUERY PLAN @@ -1138,8 +1040,7 @@ BEGIN; Output: ('returning'::text), metrics_timestamp_1."time" -> Update on public.metrics_timestamp (actual rows=1 loops=1) Output: 'returning'::text, metrics_timestamp_1."time" - Update on public.metrics_timestamp metrics_timestamp_1 - Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 + Update on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 Update on _timescaledb_internal._hyper_5_13_chunk metrics_timestamp Update on _timescaledb_internal._hyper_5_21_chunk metrics_timestamp Update on _timescaledb_internal._hyper_5_29_chunk metrics_timestamp @@ -1148,13 +1049,10 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_timestamp metrics_timestamp_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_1 (actual rows=1 loops=1) Output: metrics_timestamp_1.tableoid, metrics_timestamp_1.ctid - Filter: (metrics_timestamp_1."time" = ('2000-01-01'::cstring)::timestamp without time zone) - -> Index Scan using _hyper_5_5_chunk_metrics_timestamp_time_idx on _timescaledb_internal._hyper_5_5_chunk metrics_timestamp_2 (actual rows=1 loops=1) - Output: metrics_timestamp_2.tableoid, metrics_timestamp_2.ctid - Index Cond: (metrics_timestamp_2."time" = ('2000-01-01'::cstring)::timestamp without time zone) -(20 rows) + Index Cond: (metrics_timestamp_1."time" = ('2000-01-01'::cstring)::timestamp without time zone) +(16 rows) :PREFIX UPDATE metrics_timestamptz SET value = 0.2 WHERE time = '2000-01-01'::text::timestamptz RETURNING 'returning', time; QUERY PLAN @@ -1163,8 +1061,7 @@ BEGIN; Output: ('returning'::text), metrics_timestamptz_1."time" -> Update on public.metrics_timestamptz (actual rows=1 loops=1) Output: 'returning'::text, metrics_timestamptz_1."time" - Update on public.metrics_timestamptz metrics_timestamptz_1 - Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 + Update on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 Update on _timescaledb_internal._hyper_6_14_chunk metrics_timestamptz Update on _timescaledb_internal._hyper_6_22_chunk metrics_timestamptz Update on _timescaledb_internal._hyper_6_30_chunk metrics_timestamptz @@ -1173,13 +1070,10 @@ BEGIN; Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 3 - -> Seq Scan on public.metrics_timestamptz metrics_timestamptz_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_1 (actual rows=1 loops=1) Output: metrics_timestamptz_1.tableoid, metrics_timestamptz_1.ctid - Filter: (metrics_timestamptz_1."time" = ('2000-01-01'::cstring)::timestamp with time zone) - -> Index Scan using _hyper_6_6_chunk_metrics_timestamptz_time_idx on _timescaledb_internal._hyper_6_6_chunk metrics_timestamptz_2 (actual rows=1 loops=1) - Output: metrics_timestamptz_2.tableoid, metrics_timestamptz_2.ctid - Index Cond: (metrics_timestamptz_2."time" = ('2000-01-01'::cstring)::timestamp with time zone) -(20 rows) + Index Cond: (metrics_timestamptz_1."time" = ('2000-01-01'::cstring)::timestamp with time zone) +(16 rows) ROLLBACK; -- subselects @@ -1332,31 +1226,27 @@ BEGIN; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 (actual rows=0 loops=1) - Update on public.metrics_int4 metrics_int4_1 - Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 - Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 - Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 + Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 + Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 + Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 -> Hash Join (actual rows=4 loops=1) Output: '0.1'::double precision, metrics_int2.ctid, metrics_int4.tableoid, metrics_int4.ctid, metrics_int2.tableoid Inner Unique: true Hash Cond: (metrics_int4."time" = metrics_int2."time") -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 (actual rows=1 loops=1) Output: metrics_int4_1."time", metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" < length(version())) - -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 (actual rows=1 loops=1) + Index Cond: (metrics_int4_1."time" < length(version())) + -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 (actual rows=1 loops=1) Output: metrics_int4_2."time", metrics_int4_2.tableoid, metrics_int4_2.ctid Index Cond: (metrics_int4_2."time" < length(version())) - -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 (actual rows=1 loops=1) Output: metrics_int4_3."time", metrics_int4_3.tableoid, metrics_int4_3.ctid Index Cond: (metrics_int4_3."time" < length(version())) - -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 (actual rows=1 loops=1) Output: metrics_int4_4."time", metrics_int4_4.tableoid, metrics_int4_4.ctid Index Cond: (metrics_int4_4."time" < length(version())) - -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 (actual rows=1 loops=1) - Output: metrics_int4_5."time", metrics_int4_5.tableoid, metrics_int4_5.ctid - Index Cond: (metrics_int4_5."time" < length(version())) -> Hash (actual rows=4 loops=1) Output: metrics_int2.ctid, metrics_int2."time", metrics_int2.tableoid Buckets: 1024 Batches: 1 @@ -1365,17 +1255,15 @@ BEGIN; Group Key: metrics_int2."time" Batches: 1 -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_1_chunk metrics_int2_1 (actual rows=1 loops=1) Output: metrics_int2_1.ctid, metrics_int2_1."time", metrics_int2_1.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_1_chunk metrics_int2_2 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_9_chunk metrics_int2_2 (actual rows=1 loops=1) Output: metrics_int2_2.ctid, metrics_int2_2."time", metrics_int2_2.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_9_chunk metrics_int2_3 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_17_chunk metrics_int2_3 (actual rows=1 loops=1) Output: metrics_int2_3.ctid, metrics_int2_3."time", metrics_int2_3.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_17_chunk metrics_int2_4 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_25_chunk metrics_int2_4 (actual rows=1 loops=1) Output: metrics_int2_4.ctid, metrics_int2_4."time", metrics_int2_4.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_25_chunk metrics_int2_5 (actual rows=1 loops=1) - Output: metrics_int2_5.ctid, metrics_int2_5."time", metrics_int2_5.tableoid -(45 rows) +(39 rows) ROLLBACK; BEGIN; @@ -1384,26 +1272,23 @@ BEGIN; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 (actual rows=0 loops=1) - Update on public.metrics_int4 metrics_int4_1 - Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 - Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 - Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 + Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 + Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 + Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 -> Hash Join (actual rows=4 loops=1) Output: '0.1'::double precision, metrics_int2.ctid, metrics_int4.tableoid, metrics_int4.ctid, metrics_int2.tableoid Inner Unique: true Hash Cond: (metrics_int4."time" = metrics_int2."time") -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 (actual rows=1 loops=1) Output: metrics_int4_1."time", metrics_int4_1.tableoid, metrics_int4_1.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 (actual rows=1 loops=1) Output: metrics_int4_2."time", metrics_int4_2.tableoid, metrics_int4_2.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 (actual rows=1 loops=1) Output: metrics_int4_3."time", metrics_int4_3.tableoid, metrics_int4_3.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 (actual rows=1 loops=1) Output: metrics_int4_4."time", metrics_int4_4.tableoid, metrics_int4_4.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 (actual rows=1 loops=1) - Output: metrics_int4_5."time", metrics_int4_5.tableoid, metrics_int4_5.ctid -> Hash (actual rows=4 loops=1) Output: metrics_int2.ctid, metrics_int2."time", metrics_int2.tableoid Buckets: 1024 Batches: 1 @@ -1412,22 +1297,19 @@ BEGIN; Group Key: metrics_int2."time" Batches: 1 -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk metrics_int2_1 (actual rows=1 loops=1) Output: metrics_int2_1.ctid, metrics_int2_1."time", metrics_int2_1.tableoid - Filter: (metrics_int2_1."time" < length(version())) - -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk metrics_int2_2 (actual rows=1 loops=1) + Index Cond: (metrics_int2_1."time" < length(version())) + -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_2 (actual rows=1 loops=1) Output: metrics_int2_2.ctid, metrics_int2_2."time", metrics_int2_2.tableoid Index Cond: (metrics_int2_2."time" < length(version())) - -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_3 (actual rows=1 loops=1) Output: metrics_int2_3.ctid, metrics_int2_3."time", metrics_int2_3.tableoid Index Cond: (metrics_int2_3."time" < length(version())) - -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk metrics_int2_4 (actual rows=1 loops=1) Output: metrics_int2_4.ctid, metrics_int2_4."time", metrics_int2_4.tableoid Index Cond: (metrics_int2_4."time" < length(version())) - -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk metrics_int2_5 (actual rows=1 loops=1) - Output: metrics_int2_5.ctid, metrics_int2_5."time", metrics_int2_5.tableoid - Index Cond: (metrics_int2_5."time" < length(version())) -(45 rows) +(39 rows) ROLLBACK; BEGIN; @@ -1436,31 +1318,27 @@ BEGIN; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 (actual rows=0 loops=1) - Update on public.metrics_int4 metrics_int4_1 - Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 - Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 - Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 - Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 + Update on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 + Update on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 + Update on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 + Update on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 -> Hash Join (actual rows=4 loops=1) Output: '0.1'::double precision, metrics_int2.ctid, metrics_int4.tableoid, metrics_int4.ctid, metrics_int2.tableoid Inner Unique: true Hash Cond: (metrics_int4."time" = metrics_int2."time") -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int4 metrics_int4_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk metrics_int4_1 (actual rows=1 loops=1) Output: metrics_int4_1."time", metrics_int4_1.tableoid, metrics_int4_1.ctid - Filter: (metrics_int4_1."time" < length(version())) - -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk metrics_int4_2 (actual rows=1 loops=1) + Index Cond: (metrics_int4_1."time" < length(version())) + -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_2 (actual rows=1 loops=1) Output: metrics_int4_2."time", metrics_int4_2.tableoid, metrics_int4_2.ctid Index Cond: (metrics_int4_2."time" < length(version())) - -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk metrics_int4_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_3 (actual rows=1 loops=1) Output: metrics_int4_3."time", metrics_int4_3.tableoid, metrics_int4_3.ctid Index Cond: (metrics_int4_3."time" < length(version())) - -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk metrics_int4_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk metrics_int4_4 (actual rows=1 loops=1) Output: metrics_int4_4."time", metrics_int4_4.tableoid, metrics_int4_4.ctid Index Cond: (metrics_int4_4."time" < length(version())) - -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk metrics_int4_5 (actual rows=1 loops=1) - Output: metrics_int4_5."time", metrics_int4_5.tableoid, metrics_int4_5.ctid - Index Cond: (metrics_int4_5."time" < length(version())) -> Hash (actual rows=4 loops=1) Output: metrics_int2.ctid, metrics_int2."time", metrics_int2.tableoid Buckets: 1024 Batches: 1 @@ -1469,22 +1347,19 @@ BEGIN; Group Key: metrics_int2."time" Batches: 1 -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int2 metrics_int2_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk metrics_int2_1 (actual rows=1 loops=1) Output: metrics_int2_1.ctid, metrics_int2_1."time", metrics_int2_1.tableoid - Filter: (metrics_int2_1."time" < length(version())) - -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk metrics_int2_2 (actual rows=1 loops=1) + Index Cond: (metrics_int2_1."time" < length(version())) + -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_2 (actual rows=1 loops=1) Output: metrics_int2_2.ctid, metrics_int2_2."time", metrics_int2_2.tableoid Index Cond: (metrics_int2_2."time" < length(version())) - -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk metrics_int2_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_3 (actual rows=1 loops=1) Output: metrics_int2_3.ctid, metrics_int2_3."time", metrics_int2_3.tableoid Index Cond: (metrics_int2_3."time" < length(version())) - -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk metrics_int2_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk metrics_int2_4 (actual rows=1 loops=1) Output: metrics_int2_4.ctid, metrics_int2_4."time", metrics_int2_4.tableoid Index Cond: (metrics_int2_4."time" < length(version())) - -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk metrics_int2_5 (actual rows=1 loops=1) - Output: metrics_int2_5.ctid, metrics_int2_5."time", metrics_int2_5.tableoid - Index Cond: (metrics_int2_5."time" < length(version())) -(50 rows) +(43 rows) ROLLBACK; -- join @@ -1610,38 +1485,33 @@ BEGIN; ---------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 m4 (actual rows=0 loops=1) - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Nested Loop (actual rows=16 loops=1) Output: '0.15'::double precision, m2.ctid, m4.tableoid, m4.ctid, m2.tableoid -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int2 m2_1 (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_1_chunk m2_1 (actual rows=1 loops=1) Output: m2_1.ctid, m2_1.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_1_chunk m2_2 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_9_chunk m2_2 (actual rows=1 loops=1) Output: m2_2.ctid, m2_2.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_9_chunk m2_3 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_17_chunk m2_3 (actual rows=1 loops=1) Output: m2_3.ctid, m2_3.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_17_chunk m2_4 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.ctid, m2_4.tableoid - -> Seq Scan on _timescaledb_internal._hyper_1_25_chunk m2_5 (actual rows=1 loops=1) - Output: m2_5.ctid, m2_5.tableoid -> Materialize (actual rows=4 loops=4) Output: m4.tableoid, m4.ctid -> Append (actual rows=4 loops=1) - -> Seq Scan on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1.tableoid, m4_1.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2.tableoid, m4_2.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3.tableoid, m4_3.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Seq Scan on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4.tableoid, m4_4.ctid - -> Seq Scan on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5.tableoid, m4_5.ctid -(33 rows) +(28 rows) ROLLBACK; BEGIN; @@ -1650,41 +1520,36 @@ BEGIN; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 m4 (actual rows=0 loops=1) - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Merge Join (actual rows=4 loops=1) Output: '0.15'::double precision, m2.ctid, m4.tableoid, m4.ctid, m2.tableoid Merge Cond: (m4."time" = m2."time") -> Merge Append (actual rows=4 loops=1) Sort Key: m4."time" - -> Index Scan Backward using metrics_int4_time_idx on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1."time", m4_1.tableoid, m4_1.ctid - -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2."time", m4_2.tableoid, m4_2.ctid - -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3."time", m4_3.tableoid, m4_3.ctid - -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4."time", m4_4.tableoid, m4_4.ctid - -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5."time", m4_5.tableoid, m4_5.ctid -> Materialize (actual rows=4 loops=1) Output: m2.ctid, m2."time", m2.tableoid -> Merge Append (actual rows=4 loops=1) Sort Key: m2."time" - -> Index Scan Backward using metrics_int2_time_idx on public.metrics_int2 m2_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_1 (actual rows=1 loops=1) Output: m2_1.ctid, m2_1."time", m2_1.tableoid - -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_2 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_2 (actual rows=1 loops=1) Output: m2_2.ctid, m2_2."time", m2_2.tableoid - -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_3 (actual rows=1 loops=1) Output: m2_3.ctid, m2_3."time", m2_3.tableoid - -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.ctid, m2_4."time", m2_4.tableoid - -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_5 (actual rows=1 loops=1) - Output: m2_5.ctid, m2_5."time", m2_5.tableoid -(36 rows) +(31 rows) ROLLBACK; BEGIN; @@ -1693,46 +1558,40 @@ BEGIN; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 m4 (actual rows=0 loops=1) - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Merge Join (actual rows=4 loops=1) Output: '0.15'::double precision, m2.ctid, m4.tableoid, m4.ctid, m2.tableoid Merge Cond: (m4."time" = m2."time") -> Merge Append (actual rows=4 loops=1) Sort Key: m4."time" - -> Index Scan Backward using metrics_int4_time_idx on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1."time", m4_1.tableoid, m4_1.ctid Index Cond: (m4_1."time" < length(version())) - -> Index Scan Backward using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2."time", m4_2.tableoid, m4_2.ctid Index Cond: (m4_2."time" < length(version())) - -> Index Scan Backward using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3."time", m4_3.tableoid, m4_3.ctid Index Cond: (m4_3."time" < length(version())) - -> Index Scan Backward using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4."time", m4_4.tableoid, m4_4.ctid Index Cond: (m4_4."time" < length(version())) - -> Index Scan Backward using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5."time", m4_5.tableoid, m4_5.ctid - Index Cond: (m4_5."time" < length(version())) -> Materialize (actual rows=4 loops=1) Output: m2.ctid, m2."time", m2.tableoid -> Merge Append (actual rows=4 loops=1) Sort Key: m2."time" - -> Index Scan Backward using metrics_int2_time_idx on public.metrics_int2 m2_1 (actual rows=0 loops=1) + -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_1 (actual rows=1 loops=1) Output: m2_1.ctid, m2_1."time", m2_1.tableoid - -> Index Scan Backward using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_2 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_2 (actual rows=1 loops=1) Output: m2_2.ctid, m2_2."time", m2_2.tableoid - -> Index Scan Backward using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_3 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_3 (actual rows=1 loops=1) Output: m2_3.ctid, m2_3."time", m2_3.tableoid - -> Index Scan Backward using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_4 (actual rows=1 loops=1) + -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.ctid, m2_4."time", m2_4.tableoid - -> Index Scan Backward using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_5 (actual rows=1 loops=1) - Output: m2_5.ctid, m2_5."time", m2_5.tableoid -(41 rows) +(35 rows) ROLLBACK; -- cte @@ -1837,32 +1696,28 @@ SELECT * FROM u; Output: m4_1."time" -> Update on public.metrics_int4 m4 (actual rows=4 loops=1) Output: m4_1."time" - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Custom Scan (ChunkAppend) on public.metrics_int4 m4 (actual rows=4 loops=1) Output: 'cte update'::text, m4.tableoid, m4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1.tableoid, m4_1.ctid - Filter: (m4_1."time" < length(version())) - -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + Index Cond: (m4_1."time" < length(version())) + -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2.tableoid, m4_2.ctid Index Cond: (m4_2."time" < length(version())) - -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3.tableoid, m4_3.ctid Index Cond: (m4_3."time" < length(version())) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4.tableoid, m4_4.ctid Index Cond: (m4_4."time" < length(version())) - -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5.tableoid, m4_5.ctid - Index Cond: (m4_5."time" < length(version())) -(32 rows) +(28 rows) ROLLBACK; BEGIN; @@ -1874,58 +1729,50 @@ UPDATE metrics_int2 m2 SET data = 'cte update 2' WHERE m2.time < length(version( CTE u -> Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_int4 m4 (actual rows=0 loops=1) - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Custom Scan (ChunkAppend) on public.metrics_int4 m4 (actual rows=4 loops=1) Output: 'cte update 1'::text, m4.tableoid, m4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1.tableoid, m4_1.ctid - Filter: (m4_1."time" < length(version())) - -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + Index Cond: (m4_1."time" < length(version())) + -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2.tableoid, m4_2.ctid Index Cond: (m4_2."time" < length(version())) - -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3.tableoid, m4_3.ctid Index Cond: (m4_3."time" < length(version())) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4.tableoid, m4_4.ctid Index Cond: (m4_4."time" < length(version())) - -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5.tableoid, m4_5.ctid - Index Cond: (m4_5."time" < length(version())) -> Update on public.metrics_int2 m2 (actual rows=0 loops=1) - Update on public.metrics_int2 m2_1 - Update on _timescaledb_internal._hyper_1_1_chunk m2_2 - Update on _timescaledb_internal._hyper_1_9_chunk m2_3 - Update on _timescaledb_internal._hyper_1_17_chunk m2_4 - Update on _timescaledb_internal._hyper_1_25_chunk m2_5 + Update on _timescaledb_internal._hyper_1_1_chunk m2_1 + Update on _timescaledb_internal._hyper_1_9_chunk m2_2 + Update on _timescaledb_internal._hyper_1_17_chunk m2_3 + Update on _timescaledb_internal._hyper_1_25_chunk m2_4 -> Custom Scan (ChunkAppend) on public.metrics_int2 m2 (actual rows=4 loops=1) Output: 'cte update 2'::text, m2.tableoid, m2.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_int2 m2_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_1 (actual rows=1 loops=1) Output: m2_1.tableoid, m2_1.ctid - Filter: (m2_1."time" < length(version())) - -> Index Scan using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_2 (actual rows=1 loops=1) + Index Cond: (m2_1."time" < length(version())) + -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_2 (actual rows=1 loops=1) Output: m2_2.tableoid, m2_2.ctid Index Cond: (m2_2."time" < length(version())) - -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_3 (actual rows=1 loops=1) Output: m2_3.tableoid, m2_3.ctid Index Cond: (m2_3."time" < length(version())) - -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.tableoid, m2_4.ctid Index Cond: (m2_4."time" < length(version())) - -> Index Scan using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_5 (actual rows=1 loops=1) - Output: m2_5.tableoid, m2_5.ctid - Index Cond: (m2_5."time" < length(version())) -(55 rows) +(47 rows) ROLLBACK; BEGIN; @@ -1960,32 +1807,28 @@ UPDATE metrics_int2 m2 SET data = 'cte update' WHERE m2.time < length(version()) Output: m4_4.tableoid, m4_4.ctid Index Cond: (m4_4."time" < length(version())) -> Update on public.metrics_int2 m2 (actual rows=0 loops=1) - Update on public.metrics_int2 m2_1 - Update on _timescaledb_internal._hyper_1_1_chunk m2_2 - Update on _timescaledb_internal._hyper_1_9_chunk m2_3 - Update on _timescaledb_internal._hyper_1_17_chunk m2_4 - Update on _timescaledb_internal._hyper_1_25_chunk m2_5 + Update on _timescaledb_internal._hyper_1_1_chunk m2_1 + Update on _timescaledb_internal._hyper_1_9_chunk m2_2 + Update on _timescaledb_internal._hyper_1_17_chunk m2_3 + Update on _timescaledb_internal._hyper_1_25_chunk m2_4 -> Custom Scan (ChunkAppend) on public.metrics_int2 m2 (actual rows=4 loops=1) Output: 'cte update'::text, m2.tableoid, m2.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_int2 m2_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_1 (actual rows=1 loops=1) Output: m2_1.tableoid, m2_1.ctid - Filter: (m2_1."time" < length(version())) - -> Index Scan using _hyper_1_1_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_1_chunk m2_2 (actual rows=1 loops=1) + Index Cond: (m2_1."time" < length(version())) + -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_2 (actual rows=1 loops=1) Output: m2_2.tableoid, m2_2.ctid Index Cond: (m2_2."time" < length(version())) - -> Index Scan using _hyper_1_9_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_9_chunk m2_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_3 (actual rows=1 loops=1) Output: m2_3.tableoid, m2_3.ctid Index Cond: (m2_3."time" < length(version())) - -> Index Scan using _hyper_1_17_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_17_chunk m2_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.tableoid, m2_4.ctid Index Cond: (m2_4."time" < length(version())) - -> Index Scan using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_5 (actual rows=1 loops=1) - Output: m2_5.tableoid, m2_5.ctid - Index Cond: (m2_5."time" < length(version())) -(52 rows) +(48 rows) ROLLBACK; BEGIN; @@ -1999,31 +1842,27 @@ DELETE FROM metrics_int2 m2 WHERE m2.time < length(version()); Output: m4_1."time" -> Update on public.metrics_int4 m4 (actual rows=4 loops=1) Output: m4_1."time" - Update on public.metrics_int4 m4_1 - Update on _timescaledb_internal._hyper_2_2_chunk m4_2 - Update on _timescaledb_internal._hyper_2_10_chunk m4_3 - Update on _timescaledb_internal._hyper_2_18_chunk m4_4 - Update on _timescaledb_internal._hyper_2_26_chunk m4_5 + Update on _timescaledb_internal._hyper_2_2_chunk m4_1 + Update on _timescaledb_internal._hyper_2_10_chunk m4_2 + Update on _timescaledb_internal._hyper_2_18_chunk m4_3 + Update on _timescaledb_internal._hyper_2_26_chunk m4_4 -> Custom Scan (ChunkAppend) on public.metrics_int4 m4 (actual rows=4 loops=1) Output: 'cte update'::text, m4.tableoid, m4.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 0 - -> Seq Scan on public.metrics_int4 m4_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_1 (actual rows=1 loops=1) Output: m4_1.tableoid, m4_1.ctid - Filter: (m4_1."time" < length(version())) - -> Index Scan using _hyper_2_2_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_2_chunk m4_2 (actual rows=1 loops=1) + Index Cond: (m4_1."time" < length(version())) + -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_2 (actual rows=1 loops=1) Output: m4_2.tableoid, m4_2.ctid Index Cond: (m4_2."time" < length(version())) - -> Index Scan using _hyper_2_10_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_10_chunk m4_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_3 (actual rows=1 loops=1) Output: m4_3.tableoid, m4_3.ctid Index Cond: (m4_3."time" < length(version())) - -> Index Scan using _hyper_2_18_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_18_chunk m4_4 (actual rows=1 loops=1) + -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_4 (actual rows=1 loops=1) Output: m4_4.tableoid, m4_4.ctid Index Cond: (m4_4."time" < length(version())) - -> Index Scan using _hyper_2_26_chunk_metrics_int4_time_idx on _timescaledb_internal._hyper_2_26_chunk m4_5 (actual rows=1 loops=1) - Output: m4_5.tableoid, m4_5.ctid - Index Cond: (m4_5."time" < length(version())) -> Delete on public.metrics_int2 m2 (actual rows=0 loops=1) Delete on _timescaledb_internal._hyper_1_1_chunk m2_1 Delete on _timescaledb_internal._hyper_1_9_chunk m2_2 @@ -2045,7 +1884,7 @@ DELETE FROM metrics_int2 m2 WHERE m2.time < length(version()); -> Index Scan using _hyper_1_25_chunk_metrics_int2_time_idx on _timescaledb_internal._hyper_1_25_chunk m2_4 (actual rows=1 loops=1) Output: m2_4.tableoid, m2_4.ctid Index Cond: (m2_4."time" < length(version())) -(52 rows) +(48 rows) ROLLBACK; -- test interaction with compression @@ -2086,28 +1925,24 @@ BEGIN; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Custom Scan (HypertableModify) (actual rows=0 loops=1) -> Update on public.metrics_compressed (actual rows=0 loops=1) - Update on public.metrics_compressed metrics_compressed_1 Update on _timescaledb_internal._hyper_8_33_chunk metrics_compressed - Update on _timescaledb_internal._hyper_8_35_chunk metrics_compressed_2 - Update on _timescaledb_internal._hyper_8_36_chunk metrics_compressed_3 - Update on _timescaledb_internal._hyper_8_37_chunk metrics_compressed_4 + Update on _timescaledb_internal._hyper_8_35_chunk metrics_compressed_1 + Update on _timescaledb_internal._hyper_8_36_chunk metrics_compressed_2 + Update on _timescaledb_internal._hyper_8_37_chunk metrics_compressed_3 -> Custom Scan (ChunkAppend) on public.metrics_compressed (actual rows=3 loops=1) Output: ('2'::double precision * metrics_compressed.value), metrics_compressed.tableoid, metrics_compressed.ctid Startup Exclusion: true Runtime Exclusion: false Chunks excluded during startup: 1 - -> Seq Scan on public.metrics_compressed metrics_compressed_1 (actual rows=0 loops=1) + -> Index Scan using _hyper_8_35_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_35_chunk metrics_compressed_1 (actual rows=1 loops=1) Output: metrics_compressed_1.value, metrics_compressed_1.tableoid, metrics_compressed_1.ctid - Filter: (metrics_compressed_1."time" > ('2005-01-01'::cstring)::timestamp with time zone) - -> Index Scan using _hyper_8_35_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_35_chunk metrics_compressed_2 (actual rows=1 loops=1) + Index Cond: (metrics_compressed_1."time" > ('2005-01-01'::cstring)::timestamp with time zone) + -> Index Scan using _hyper_8_36_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_36_chunk metrics_compressed_2 (actual rows=1 loops=1) Output: metrics_compressed_2.value, metrics_compressed_2.tableoid, metrics_compressed_2.ctid Index Cond: (metrics_compressed_2."time" > ('2005-01-01'::cstring)::timestamp with time zone) - -> Index Scan using _hyper_8_36_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_36_chunk metrics_compressed_3 (actual rows=1 loops=1) + -> Index Scan using _hyper_8_37_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_37_chunk metrics_compressed_3 (actual rows=1 loops=1) Output: metrics_compressed_3.value, metrics_compressed_3.tableoid, metrics_compressed_3.ctid Index Cond: (metrics_compressed_3."time" > ('2005-01-01'::cstring)::timestamp with time zone) - -> Index Scan using _hyper_8_37_chunk_metrics_compressed_time_idx on _timescaledb_internal._hyper_8_37_chunk metrics_compressed_4 (actual rows=1 loops=1) - Output: metrics_compressed_4.value, metrics_compressed_4.tableoid, metrics_compressed_4.ctid - Index Cond: (metrics_compressed_4."time" > ('2005-01-01'::cstring)::timestamp with time zone) -(24 rows) +(20 rows) ROLLBACK;