22
33require 'active_record/connection_adapters/postgresql_adapter'
44require 'timescaledb/rails/orderby_compression'
5+ require 'tsort'
56
67module Timescaledb
78 module Rails
@@ -19,14 +20,20 @@ def tables(stream)
1920 def continuous_aggregates ( stream )
2021 return unless timescale_enabled?
2122
22- Timescaledb ::Rails ::ContinuousAggregate . all . each do |continuous_aggregate |
23- continuous_aggregate ( continuous_aggregate , stream )
24- continuous_aggregate_policy ( continuous_aggregate , stream )
23+ deps = Timescaledb ::Rails ::ContinuousAggregate . find_each . index_by ( &:materialization_hypertable_name )
24+
25+ TSort . tsort (
26+ -> ( &b ) { deps . each_value ( &b ) } ,
27+ -> ( n , &b ) { Array . wrap ( deps [ n . hypertable_name ] ) . each ( &b ) }
28+ ) . each do |ca |
29+ continuous_aggregate ( ca , stream )
30+ continuous_aggregate_policy ( ca , stream )
2531 end
2632 end
2733
28- def continuous_aggregate ( continuous_aggregate , stream )
29- stream . puts " create_continuous_aggregate #{ continuous_aggregate . view_name . inspect } , <<-SQL"
34+ def continuous_aggregate ( continuous_aggregate , stream , force : false )
35+ stream . puts " create_continuous_aggregate #{ continuous_aggregate . view_name . inspect } , <<-SQL, " \
36+ "force: #{ force . inspect } "
3037 stream . puts " #{ continuous_aggregate . view_definition . strip . indent ( 2 ) } "
3138 stream . puts ' SQL'
3239 stream . puts
@@ -149,7 +156,8 @@ def format_hypertable_option_value(value)
149156 end
150157
151158 def timescale_enabled?
152- Timescaledb ::Rails ::Hypertable . table_exists?
159+ @connection . pool . db_config . name == Timescaledb ::Rails ::Hypertable . connection . pool . db_config . name &&
160+ Timescaledb ::Rails ::Hypertable . table_exists?
153161 end
154162 end
155163 end
0 commit comments