@@ -22,64 +22,47 @@ DECLARE
22
22
compress_after interval;
23
23
BEGIN
24
24
FOR view_name IN
25
- SELECT format(' %s' , unnest(ARRAY[
26
- -- Sub-minute aggregates
25
+ SELECT unnest(ARRAY[
27
26
' price_100_ms_agg' , ' price_1_s_agg' , ' price_5_s_agg' ,
28
27
' price_100_ms_agg_future' , ' price_1_s_agg_future' , ' price_5_s_agg_future' ,
29
28
' candle_10_s' , ' candle_10_s_future' ,
30
-
31
- -- 1-15min aggregates
32
29
' price_1_min_agg' , ' price_15_min_agg' ,
33
30
' price_1_min_agg_future' , ' price_15_min_agg_future' ,
34
31
' candle_1_min' , ' candle_5_min' , ' candle_15_min' ,
35
32
' candle_1_min_future' , ' candle_5_min_future' , ' candle_15_min_future' ,
36
33
' twap_1_min_agg' , ' twap_5_min_agg' , ' twap_15_min_agg' ,
37
34
' twap_1_min_agg_future' , ' twap_5_min_agg_future' , ' twap_15_min_agg_future' ,
38
-
39
- -- 1-2h aggregates
40
35
' price_1_h_agg' , ' price_2_h_agg' ,
41
36
' price_1_h_agg_future' , ' price_2_h_agg_future' ,
42
37
' candle_1_h' , ' candle_1_h_future' ,
43
38
' twap_1_h_agg' , ' twap_2_h_agg' ,
44
39
' twap_1_h_agg_future' , ' twap_2_h_agg_future' ,
45
-
46
- -- Daily aggregates
47
40
' price_1_day_agg' , ' price_1_day_agg_future' ,
48
41
' candle_1_day' , ' candle_1_day_future' ,
49
42
' twap_1_day_agg' , ' twap_1_day_agg_future' ,
50
-
51
- -- Weekly aggregates
52
43
' price_1_week_agg' , ' price_1_week_agg_future'
53
- ]))
44
+ ])
54
45
LOOP
55
- -- Check if view exists
56
- IF NOT EXISTS (SELECT 1 FROM pg_matviews WHERE matviewname = view_name) THEN
57
- RAISE NOTICE ' View % does not exist, skipping...' , view_name;
58
- CONTINUE;
59
- END IF;
60
-
61
46
-- Set compression interval based on view name pattern
62
47
compress_after :=
63
48
CASE
64
- WHEN view_name LIKE ' %100_ms%' OR view_name LIKE ' %_s_ %' THEN INTERVAL ' 1 hour'
49
+ WHEN view_name LIKE ' %100_ms%' OR view_name LIKE ' %s %' THEN INTERVAL ' 1 hour'
65
50
WHEN view_name LIKE ' %min%' THEN INTERVAL ' 6 hours'
66
- WHEN view_name LIKE ' %_h_ %' OR view_name LIKE ' %_2_h %' THEN INTERVAL ' 1 day'
51
+ WHEN view_name LIKE ' %h %' OR view_name LIKE ' %2_h %' THEN INTERVAL ' 1 day'
67
52
WHEN view_name LIKE ' %day%' THEN INTERVAL ' 7 days'
68
53
WHEN view_name LIKE ' %week%' THEN INTERVAL ' 30 days'
69
54
END;
70
55
71
- BEGIN
72
- -- Enable columnstore and set segmentby for each view
73
- EXECUTE format(' ALTER MATERIALIZED VIEW %I SET (timescaledb.enable_columnstore = true, timescaledb.segmentby = ' ' pair_id' ' )' , view_name);
74
- -- Add compression policy
75
- EXECUTE format(' CALL add_columnstore_policy(%L, after => $1, if_not_exists => true)' , view_name) USING compress_after;
76
- EXCEPTION
77
- WHEN OTHERS THEN
78
- RAISE WARNING ' Failed to add compression policy for view %: %' , view_name, SQLERRM;
79
- END;
56
+ -- Enable columnstore and set segmentby for each view
57
+ EXECUTE format(' ALTER MATERIALIZED VIEW %I SET (timescaledb.enable_columnstore = true, timescaledb.segmentby = ' ' pair_id' ' )' , view_name);
58
+
59
+ -- Add compression policy
60
+ EXECUTE format(' CALL add_columnstore_policy(%I, compress_after => $1)' , view_name) USING compress_after;
61
+
80
62
END LOOP;
81
63
END;
82
64
$$ LANGUAGE plpgsql;
83
65
66
+
84
67
-- Add compression policies to all continuous aggregates
85
68
SELECT add_compression_to_continuous_aggregates();
0 commit comments