diff --git a/CHANGELOG.md b/CHANGELOG.md index fff32476c..df85510df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ accidentally triggering the load of a previous DB version.** * #5336 Use NameData and namestrcpy for names * #5317 Fix some incorrect memory handling * #5367 Rename columns in old-style continuous aggregates +* #5384 Fix Hierarchical Continuous Aggregates chunk_interval_size **Thanks** * @Medvecrab for discovering an issue with copying NameData when forming heap tuples. diff --git a/tsl/src/continuous_aggs/create.c b/tsl/src/continuous_aggs/create.c index 6dc311712..ada8166d1 100644 --- a/tsl/src/continuous_aggs/create.c +++ b/tsl/src/continuous_aggs/create.c @@ -205,7 +205,7 @@ static Var *mattablecolumninfo_addentry(MatTableColumnInfo *out, Node *input, static void mattablecolumninfo_addinternal(MatTableColumnInfo *matcolinfo); static int32 mattablecolumninfo_create_materialization_table( MatTableColumnInfo *matcolinfo, int32 hypertable_id, RangeVar *mat_rel, - CAggTimebucketInfo *origquery_tblinfo, bool create_addl_index, char *tablespacename, + CAggTimebucketInfo *bucket_info, bool create_addl_index, char *tablespacename, char *table_access_method, ObjectAddress *mataddress); static Query *mattablecolumninfo_get_partial_select_query(MatTableColumnInfo *mattblinfo, Query *userview_query, bool finalized); @@ -549,8 +549,8 @@ mattablecolumninfo_add_mattable_index(MatTableColumnInfo *matcolinfo, Hypertable * * Parameters: * mat_rel: relation information for the materialization table - * origquery_tblinfo: - user query's tbale information. used for setting up - * thr partitioning of the hypertable. + * bucket_info: bucket information used for setting up the + * hypertable partitioning (`chunk_interval_size`). * tablespace_name: Name of the tablespace for the materialization table. * table_access_method: Name of the table access method to use for the * materialization table. @@ -559,8 +559,7 @@ mattablecolumninfo_add_mattable_index(MatTableColumnInfo *matcolinfo, Hypertable */ static int32 mattablecolumninfo_create_materialization_table(MatTableColumnInfo *matcolinfo, int32 hypertable_id, - RangeVar *mat_rel, - CAggTimebucketInfo *origquery_tblinfo, + RangeVar *mat_rel, CAggTimebucketInfo *bucket_info, bool create_addl_index, char *const tablespacename, char *const table_access_method, ObjectAddress *mataddress) @@ -604,7 +603,12 @@ mattablecolumninfo_create_materialization_table(MatTableColumnInfo *matcolinfo, RESTORE_USER(uid, saved_uid, sec_ctx); /* Convert the materialization table to a hypertable. */ - matpartcol_interval = MATPARTCOL_INTERVAL_FACTOR * (origquery_tblinfo->htpartcol_interval_len); + matpartcol_interval = bucket_info->htpartcol_interval_len; + + /* Apply the factor just for non-Hierachical CAggs */ + if (bucket_info->parent_mat_hypertable_id == INVALID_HYPERTABLE_ID) + matpartcol_interval *= MATPARTCOL_INTERVAL_FACTOR; + cagg_create_hypertable(hypertable_id, mat_relid, matpartcolname, matpartcol_interval); /* Retrieve the hypertable id from the cache. */ @@ -621,7 +625,7 @@ mattablecolumninfo_create_materialization_table(MatTableColumnInfo *matcolinfo, * aggregate. This is the initial state of the aggregate before any * refreshes. */ - orig_ht = ts_hypertable_cache_get_entry(hcache, origquery_tblinfo->htoid, CACHE_FLAG_NONE); + orig_ht = ts_hypertable_cache_get_entry(hcache, bucket_info->htoid, CACHE_FLAG_NONE); continuous_agg_invalidate_mat_ht(orig_ht, mat_ht, TS_TIME_NOBEGIN, TS_TIME_NOEND); ts_cache_release(hcache); return mat_htid; @@ -2615,7 +2619,7 @@ fixup_userview_query_tlist(Query *userquery, List *tlist_aliases) */ static void cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquery, - CAggTimebucketInfo *origquery_ht, WithClauseResult *with_clause_options) + CAggTimebucketInfo *bucket_info, WithClauseResult *with_clause_options) { ObjectAddress mataddress; char relnamebuf[NAMEDATALEN]; @@ -2668,7 +2672,7 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer mattablecolumninfo_create_materialization_table(&mattblinfo, materialize_hypertable_id, mat_rel, - origquery_ht, + bucket_info, is_create_mattbl_index, create_stmt->into->tableSpaceName, create_stmt->into->accessMethod, @@ -2682,7 +2686,7 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer mat_rel->relname); if (!materialized_only) - final_selquery = build_union_query(origquery_ht, + final_selquery = build_union_query(bucket_info, mattblinfo.matpartcolno, final_selquery, panquery, @@ -2719,19 +2723,19 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer nspid = RangeVarGetCreationNamespace(stmt->view); create_cagg_catalog_entry(materialize_hypertable_id, - origquery_ht->htid, + bucket_info->htid, get_namespace_name(nspid), /*schema name for user view */ stmt->view->relname, part_rel->schemaname, part_rel->relname, - origquery_ht->bucket_width, + bucket_info->bucket_width, materialized_only, dum_rel->schemaname, dum_rel->relname, finalized, - origquery_ht->parent_mat_hypertable_id); + bucket_info->parent_mat_hypertable_id); - if (origquery_ht->bucket_width == BUCKET_WIDTH_VARIABLE) + if (bucket_info->bucket_width == BUCKET_WIDTH_VARIABLE) { const char *bucket_width; const char *origin = ""; @@ -2739,14 +2743,14 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer /* * Variable-sized buckets work only with intervals. */ - Assert(origquery_ht->interval != NULL); + Assert(bucket_info->interval != NULL); bucket_width = DatumGetCString( - DirectFunctionCall1(interval_out, IntervalPGetDatum(origquery_ht->interval))); + DirectFunctionCall1(interval_out, IntervalPGetDatum(bucket_info->interval))); - if (!TIMESTAMP_NOT_FINITE(origquery_ht->origin)) + if (!TIMESTAMP_NOT_FINITE(bucket_info->origin)) { origin = DatumGetCString( - DirectFunctionCall1(timestamp_out, TimestampGetDatum(origquery_ht->origin))); + DirectFunctionCall1(timestamp_out, TimestampGetDatum(bucket_info->origin))); } /* @@ -2757,17 +2761,16 @@ cagg_create(const CreateTableAsStmt *create_stmt, ViewStmt *stmt, Query *panquer * that can be optimized later. */ create_bucket_function_catalog_entry(materialize_hypertable_id, - get_func_namespace( - origquery_ht->bucket_func->funcid) != + get_func_namespace(bucket_info->bucket_func->funcid) != PG_PUBLIC_NAMESPACE, - get_func_name(origquery_ht->bucket_func->funcid), + get_func_name(bucket_info->bucket_func->funcid), bucket_width, origin, - origquery_ht->timezone); + bucket_info->timezone); } /* Step 5: Create trigger on raw hypertable -specified in the user view query. */ - cagg_add_trigger_hypertable(origquery_ht->htoid, origquery_ht->htid); + cagg_add_trigger_hypertable(bucket_info->htoid, bucket_info->htid); } DDLResult diff --git a/tsl/test/expected/cagg_on_cagg.out b/tsl/test/expected/cagg_on_cagg.out index d352f8ff5..08a9fde14 100644 --- a/tsl/test/expected/cagg_on_cagg.out +++ b/tsl/test/expected/cagg_on_cagg.out @@ -123,6 +123,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-------------------------+---------------- + conditions | 10 + conditions_summary_1_1 | 100 + conditions_summary_2_5 | 100 + conditions_summary_3_10 | 100 +(4 rows) + +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -328,21 +360,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_4_4_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_4_4_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_10" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_10" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -365,11 +397,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_3_3_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_3_3_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_5" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_5" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -384,11 +416,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_2_2_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_2_2_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_1" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_1" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -492,6 +524,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-------------------------+---------------- + conditions | 10 + conditions_summary_1_1 | 100 + conditions_summary_2_5 | 100 + conditions_summary_3_10 | 100 +(4 rows) + +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -697,21 +761,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_8_9_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_8_9_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_10" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_10" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -734,11 +798,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_7_8_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_7_8_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_5" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_5" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -753,11 +817,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_6_7_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_6_7_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_1" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_1" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for non-multiple bucket sizes @@ -1112,6 +1176,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -1317,21 +1413,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_16_14_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_16_14_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1354,11 +1450,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_15_13_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_15_13_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1373,11 +1469,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_14_12_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_14_12_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -1477,6 +1573,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -1682,21 +1810,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_20_18_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_20_18_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1719,11 +1847,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_19_17_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_19_17_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1738,11 +1866,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_18_16_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_18_16_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for variable bucket on top of fixed bucket @@ -2172,6 +2300,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -2377,21 +2537,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_29_22_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_29_22_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2414,11 +2574,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_28_21_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_28_21_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2433,11 +2593,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_27_20_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_27_20_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -2536,6 +2696,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -2741,21 +2933,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_33_26_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_33_26_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2778,11 +2970,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_32_25_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_32_25_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2797,11 +2989,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_31_24_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_31_24_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for variable bucket on top of fixed bucket diff --git a/tsl/test/expected/cagg_on_cagg_dist_ht.out b/tsl/test/expected/cagg_on_cagg_dist_ht.out index 89ce0b91f..ee1b6999e 100644 --- a/tsl/test/expected/cagg_on_cagg_dist_ht.out +++ b/tsl/test/expected/cagg_on_cagg_dist_ht.out @@ -157,6 +157,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-------------------------+---------------- + conditions | 10 + conditions_summary_1_1 | 100 + conditions_summary_2_5 | 100 + conditions_summary_3_10 | 100 +(4 rows) + +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -362,21 +394,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_4_4_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_4_4_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_10" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_10" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -399,11 +431,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_3_3_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_3_3_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_5" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_5" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -418,11 +450,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_2_2_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_2_2_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_1" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_1" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -526,6 +558,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-------------------------+---------------- + conditions | 10 + conditions_summary_1_1 | 100 + conditions_summary_2_5 | 100 + conditions_summary_3_10 | 100 +(4 rows) + +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -731,21 +795,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_1 because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_5 because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_1" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_5" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_8_9_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_8_9_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_10" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_10" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -768,11 +832,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_7_8_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_7_8_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_5" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_5" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -787,11 +851,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_6_7_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_6_7_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_1" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_1" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for non-multiple bucket sizes @@ -1149,6 +1213,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -1354,21 +1450,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_16_14_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_16_14_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1391,11 +1487,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_15_13_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_15_13_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1410,11 +1506,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_14_12_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_14_12_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -1514,6 +1610,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -1719,21 +1847,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_20_18_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_20_18_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1756,11 +1884,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_19_17_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_19_17_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -1775,11 +1903,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_18_16_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_18_16_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for variable bucket on top of fixed bucket @@ -2209,6 +2337,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -2414,21 +2574,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_29_22_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_29_22_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2451,11 +2611,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_28_21_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_28_21_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2470,11 +2630,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_27_20_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_27_20_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- Default tests \set IS_DEFAULT_COLUMN_ORDER TRUE @@ -2573,6 +2733,38 @@ SELECT FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; + name | chunk_interval +-----------------------------+---------------- + conditions | @ 7 days + conditions_summary_1_hourly | @ 70 days + conditions_summary_2_daily | @ 70 days + conditions_summary_3_weekly | @ 70 days +(4 rows) + +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; bucket | temperature @@ -2778,21 +2970,21 @@ SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; \set ON_ERROR_STOP 0 -- should error because it depends of other CAGGs DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:124: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it +psql:include/cagg_on_cagg_common.sql:150: ERROR: cannot drop view conditions_summary_1_hourly because other objects depend on it DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:125: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it +psql:include/cagg_on_cagg_common.sql:151: ERROR: cannot drop view conditions_summary_2_daily because other objects depend on it CALL refresh_continuous_aggregate(:'CAGG_NAME_1ST_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:126: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date +psql:include/cagg_on_cagg_common.sql:152: NOTICE: continuous aggregate "conditions_summary_1_hourly" is already up-to-date CALL refresh_continuous_aggregate(:'CAGG_NAME_2TH_LEVEL', NULL, NULL); -psql:include/cagg_on_cagg_common.sql:127: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date +psql:include/cagg_on_cagg_common.sql:153: NOTICE: continuous aggregate "conditions_summary_2_daily" is already up-to-date \set ON_ERROR_STOP 1 -- DROP the 3TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_3TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:131: NOTICE: drop cascades to table _timescaledb_internal._hyper_33_26_chunk +psql:include/cagg_on_cagg_common.sql:157: NOTICE: drop cascades to table _timescaledb_internal._hyper_33_26_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_3TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:134: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:160: ERROR: relation "conditions_summary_3_weekly" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2815,11 +3007,11 @@ SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -- DROP the 2TH level CAGG don't affect others DROP MATERIALIZED VIEW :CAGG_NAME_2TH_LEVEL; -psql:include/cagg_on_cagg_common.sql:145: NOTICE: drop cascades to table _timescaledb_internal._hyper_32_25_chunk +psql:include/cagg_on_cagg_common.sql:171: NOTICE: drop cascades to table _timescaledb_internal._hyper_32_25_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:148: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:174: ERROR: relation "conditions_summary_2_daily" does not exist at character 15 \set ON_ERROR_STOP 1 -- should work because dropping the top level CAGG -- don't affect the down level CAGGs @@ -2834,11 +3026,11 @@ SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -- DROP the first CAGG should work DROP MATERIALIZED VIEW :CAGG_NAME_1ST_LEVEL; -psql:include/cagg_on_cagg_common.sql:155: NOTICE: drop cascades to table _timescaledb_internal._hyper_31_24_chunk +psql:include/cagg_on_cagg_common.sql:181: NOTICE: drop cascades to table _timescaledb_internal._hyper_31_24_chunk \set ON_ERROR_STOP 0 -- should error because it was dropped SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; -psql:include/cagg_on_cagg_common.sql:158: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 +psql:include/cagg_on_cagg_common.sql:184: ERROR: relation "conditions_summary_1_hourly" does not exist at character 15 \set ON_ERROR_STOP 1 -- -- Validation test for variable bucket on top of fixed bucket diff --git a/tsl/test/sql/include/cagg_on_cagg_common.sql b/tsl/test/sql/include/cagg_on_cagg_common.sql index a80af14c6..22bfbb1ac 100644 --- a/tsl/test/sql/include/cagg_on_cagg_common.sql +++ b/tsl/test/sql/include/cagg_on_cagg_common.sql @@ -32,6 +32,32 @@ FROM :CAGG_NAME_2TH_LEVEL GROUP BY 1 WITH NO DATA; +-- Check chunk_interval +\if :IS_TIME_DIMENSION + SELECT h.table_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, _timescaledb_internal.to_interval(d.interval_length) AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\else + SELECT h.table_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.hypertable h + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = h.id + WHERE h.table_name = 'conditions' + UNION ALL + SELECT c.user_view_name AS name, d.interval_length AS chunk_interval + FROM _timescaledb_catalog.continuous_agg c + LEFT JOIN _timescaledb_catalog.dimension d on d.hypertable_id = c.mat_hypertable_id + WHERE c.user_view_name IN (:'CAGG_NAME_1ST_LEVEL', :'CAGG_NAME_2TH_LEVEL', :'CAGG_NAME_3TH_LEVEL') + ORDER BY 1, 2; +\endif + + -- No data because the CAGGs are just for materialized data SELECT * FROM :CAGG_NAME_1ST_LEVEL ORDER BY bucket; SELECT * FROM :CAGG_NAME_2TH_LEVEL ORDER BY bucket;