timescaledb 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/timescaledb/acts_as_hypertable/core.rb +1 -1
  3. data/lib/timescaledb/database/quoting.rb +12 -0
  4. data/lib/timescaledb/database/schema_statements.rb +168 -0
  5. data/lib/timescaledb/database/types.rb +17 -0
  6. data/lib/timescaledb/database.rb +11 -0
  7. data/lib/timescaledb/toolkit/time_vector.rb +41 -4
  8. data/lib/timescaledb/version.rb +1 -1
  9. metadata +6 -95
  10. data/.github/workflows/ci.yml +0 -72
  11. data/.gitignore +0 -12
  12. data/.rspec +0 -3
  13. data/.ruby-version +0 -1
  14. data/.tool-versions +0 -1
  15. data/.travis.yml +0 -9
  16. data/CODE_OF_CONDUCT.md +0 -74
  17. data/Fastfile +0 -17
  18. data/Gemfile +0 -8
  19. data/Gemfile.lock +0 -75
  20. data/Gemfile.scenic +0 -7
  21. data/Gemfile.scenic.lock +0 -119
  22. data/README.md +0 -490
  23. data/Rakefile +0 -21
  24. data/bin/console +0 -28
  25. data/bin/setup +0 -13
  26. data/docs/command_line.md +0 -178
  27. data/docs/img/lttb_example.png +0 -0
  28. data/docs/img/lttb_sql_vs_ruby.gif +0 -0
  29. data/docs/img/lttb_zoom.gif +0 -0
  30. data/docs/index.md +0 -72
  31. data/docs/migrations.md +0 -76
  32. data/docs/models.md +0 -78
  33. data/docs/toolkit.md +0 -507
  34. data/docs/toolkit_lttb_tutorial.md +0 -557
  35. data/docs/toolkit_lttb_zoom.md +0 -357
  36. data/docs/toolkit_ohlc.md +0 -315
  37. data/docs/videos.md +0 -16
  38. data/examples/all_in_one/all_in_one.rb +0 -94
  39. data/examples/all_in_one/benchmark_comparison.rb +0 -108
  40. data/examples/all_in_one/caggs.rb +0 -93
  41. data/examples/all_in_one/query_data.rb +0 -78
  42. data/examples/ranking/.gitattributes +0 -7
  43. data/examples/ranking/.gitignore +0 -29
  44. data/examples/ranking/.ruby-version +0 -1
  45. data/examples/ranking/Gemfile +0 -33
  46. data/examples/ranking/Gemfile.lock +0 -189
  47. data/examples/ranking/README.md +0 -166
  48. data/examples/ranking/Rakefile +0 -6
  49. data/examples/ranking/app/controllers/application_controller.rb +0 -2
  50. data/examples/ranking/app/controllers/concerns/.keep +0 -0
  51. data/examples/ranking/app/jobs/application_job.rb +0 -7
  52. data/examples/ranking/app/models/application_record.rb +0 -3
  53. data/examples/ranking/app/models/concerns/.keep +0 -0
  54. data/examples/ranking/app/models/game.rb +0 -2
  55. data/examples/ranking/app/models/play.rb +0 -7
  56. data/examples/ranking/bin/bundle +0 -114
  57. data/examples/ranking/bin/rails +0 -4
  58. data/examples/ranking/bin/rake +0 -4
  59. data/examples/ranking/bin/setup +0 -33
  60. data/examples/ranking/config/application.rb +0 -39
  61. data/examples/ranking/config/boot.rb +0 -4
  62. data/examples/ranking/config/credentials.yml.enc +0 -1
  63. data/examples/ranking/config/database.yml +0 -86
  64. data/examples/ranking/config/environment.rb +0 -5
  65. data/examples/ranking/config/environments/development.rb +0 -60
  66. data/examples/ranking/config/environments/production.rb +0 -75
  67. data/examples/ranking/config/environments/test.rb +0 -53
  68. data/examples/ranking/config/initializers/cors.rb +0 -16
  69. data/examples/ranking/config/initializers/filter_parameter_logging.rb +0 -8
  70. data/examples/ranking/config/initializers/inflections.rb +0 -16
  71. data/examples/ranking/config/initializers/timescale.rb +0 -2
  72. data/examples/ranking/config/locales/en.yml +0 -33
  73. data/examples/ranking/config/puma.rb +0 -43
  74. data/examples/ranking/config/routes.rb +0 -6
  75. data/examples/ranking/config/storage.yml +0 -34
  76. data/examples/ranking/config.ru +0 -6
  77. data/examples/ranking/db/migrate/20220209120747_create_games.rb +0 -10
  78. data/examples/ranking/db/migrate/20220209120910_create_plays.rb +0 -19
  79. data/examples/ranking/db/migrate/20220209143347_create_score_per_hours.rb +0 -5
  80. data/examples/ranking/db/schema.rb +0 -47
  81. data/examples/ranking/db/seeds.rb +0 -7
  82. data/examples/ranking/db/views/score_per_hours_v01.sql +0 -7
  83. data/examples/ranking/lib/tasks/.keep +0 -0
  84. data/examples/ranking/log/.keep +0 -0
  85. data/examples/ranking/public/robots.txt +0 -1
  86. data/examples/ranking/storage/.keep +0 -0
  87. data/examples/ranking/tmp/.keep +0 -0
  88. data/examples/ranking/tmp/pids/.keep +0 -0
  89. data/examples/ranking/tmp/storage/.keep +0 -0
  90. data/examples/ranking/vendor/.keep +0 -0
  91. data/examples/toolkit-demo/compare_volatility.rb +0 -104
  92. data/examples/toolkit-demo/lttb/README.md +0 -15
  93. data/examples/toolkit-demo/lttb/lttb.rb +0 -92
  94. data/examples/toolkit-demo/lttb/lttb_sinatra.rb +0 -139
  95. data/examples/toolkit-demo/lttb/lttb_test.rb +0 -21
  96. data/examples/toolkit-demo/lttb/views/index.erb +0 -27
  97. data/examples/toolkit-demo/lttb-zoom/README.md +0 -13
  98. data/examples/toolkit-demo/lttb-zoom/lttb_zoomable.rb +0 -90
  99. data/examples/toolkit-demo/lttb-zoom/views/index.erb +0 -33
  100. data/examples/toolkit-demo/ohlc.rb +0 -175
  101. data/mkdocs.yml +0 -34
  102. data/timescaledb.gemspec +0 -40
data/bin/console DELETED
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "timescaledb"
5
-
6
- def uri_from_test
7
- require 'dotenv'
8
- Dotenv.load!
9
- ENV['PG_URI_TEST']
10
- end
11
-
12
- ActiveRecord::Base.establish_connection(ARGV[0] || uri_from_test)
13
-
14
- Timescaledb::Hypertable.find_each do |hypertable|
15
- class_name = hypertable.hypertable_name.singularize.camelize
16
-
17
- model = Class.new(ActiveRecord::Base) do
18
- self.table_name = hypertable.hypertable_name
19
- self.primary_key = self.column_names.first
20
-
21
- acts_as_hypertable
22
- end
23
-
24
- Timescaledb.const_set(class_name, model)
25
- end
26
-
27
- require "pry"
28
- Pry.start(Timescaledb)
data/bin/setup DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
-
6
- set -vx
7
-
8
- bundle install
9
-
10
- bundle install --gemfile Gemfile.scenic
11
-
12
- # For running tests it's going to use PG_URI_TEST env variable.
13
- # Please make sure you set it properly to a TEST database!"
data/docs/command_line.md DELETED
@@ -1,178 +0,0 @@
1
- # Command line application
2
-
3
- When you install the gem locally, a new command line application named `tsdb` will be available on your command line.
4
-
5
- ## The `tsdb` CLI
6
-
7
- It accepts a Postgresql URI and some extra flags that can help you to get more info from your TimescaleDB server:
8
-
9
- ```bash
10
- tsdb <uri> --stats
11
- ```
12
-
13
- Where the `<uri>` is replaced with params from your connection like:
14
-
15
- ```bash
16
- tsdb postgres://<user>@localhost:5432/<dbname> --stats
17
- ```
18
-
19
- Or merely check the stats:
20
-
21
- ```bash
22
- tsdb "postgres://<user>@localhost:5432/timescaledb_test" --stats
23
- ```
24
-
25
- Here is a sample output from a database example with almost no data:
26
-
27
- ```ruby
28
- {:hypertables=>
29
- {:count=>3,
30
- :uncompressed=>2,
31
- :chunks=>{:total=>1, :compressed=>0, :uncompressed=>1},
32
- :size=>{:befoe_compressing=>"80 KB", :after_compressing=>"0 Bytes"}},
33
- :continuous_aggregates=>{:count=>1},
34
- :jobs_stats=>[{:success=>nil, :runs=>nil, :failures=>nil}]}
35
- ```
36
-
37
- To start a interactive ruby/[pry](https://github.com/pry/pry) console use `--console`:
38
- The console will dynamically create models for all hypertables that it finds
39
- in the database.
40
-
41
- Let's consider the [caggs.sql](https://gist.github.com/jonatas/95573ad8744994094ec9f284150004f9#file-caggs-sql) as the example of a database.
42
-
43
-
44
- ```bash
45
- psql postgres://<user>@localhost:5432/playground -f caggs.sql
46
- ```
47
-
48
- Then use `tsdb` in the command line with the same URI and `--stats`:
49
-
50
- ```ruby
51
- tsdb postgres://<user>@localhost:5432/playground --stats
52
- {:hypertables=>
53
- {:count=>1,
54
- :uncompressed=>1,
55
- :approximate_row_count=>{"ticks"=>352},
56
- :chunks=>{:total=>1, :compressed=>0, :uncompressed=>1},
57
- :size=>{:uncompressed=>"88 KB", :compressed=>"0 Bytes"}},
58
- :continuous_aggregates=>{:total=>1},
59
- :jobs_stats=>[{:success=>nil, :runs=>nil, :failures=>nil}]}
60
- ```
61
-
62
- To have some interactive playground with the actual database using ruby, just
63
- try the same command before changing from `--stats` to `--console`:
64
-
65
- ### tsdb --console
66
-
67
- We are using the same database from the previous example for this context which contains a hypertable named `ticks` and a view called `ohlc_1m`.
68
-
69
-
70
- ```ruby
71
- tsdb postgres://<user>@localhost:5432/playground --console
72
- pry(Timescale)>
73
- ```
74
-
75
- The `tsdb` CLI will automatically create ActiveRecord models for hypertables and the continuous aggregates views.
76
-
77
- ```ruby
78
- Tick
79
- => Timescaledb::Tick(time: datetime, symbol: string, price: decimal, volume: integer)
80
- ```
81
-
82
- Note that it's only created for this session and will never cache in the
83
- library or any other place.
84
-
85
- In this case, the `Tick` model comes from the `ticks` hypertable found in the database.
86
- It contains several methods inherited from the `acts_as_hypertable` macro.
87
-
88
- Let's start with the `.hypertable` method.
89
-
90
- ```ruby
91
- Tick.hypertable
92
- => #<Timescaledb::Hypertable:0x00007fe99c258900
93
- hypertable_schema: "public",
94
- hypertable_name: "ticks",
95
- owner: "jonatasdp",
96
- num_dimensions: 1,
97
- num_chunks: 1,
98
- compression_enabled: false,
99
- is_distributed: false,
100
- replication_factor: nil,
101
- data_nodes: nil,
102
- tablespaces: nil>
103
- ```
104
-
105
- The core of the hypertables is the fragmentation of the data into chunks, the child tables that distribute the data. You can check all chunks directly from the hypertable relation.
106
-
107
- ```ruby
108
- Tick.hypertable.chunks
109
- unknown OID 2206: failed to recognize type of 'primary_dimension_type'. It will cast as a String.
110
- => [#<Timescaledb::Chunk:0x00007fe99c31b068
111
- hypertable_schema: "public",
112
- hypertable_name: "ticks",
113
- chunk_schema: "_timescaledb_internal",
114
- chunk_name: "_hyper_33_17_chunk",
115
- primary_dimension: "time",
116
- primary_dimension_type: "timestamp without time zone",
117
- range_start: 1999-12-30 00:00:00 +0000,
118
- range_end: 2000-01-06 00:00:00 +0000,
119
- range_start_integer: nil,
120
- range_end_integer: nil,
121
- is_compressed: false,
122
- chunk_tablespace: nil,
123
- data_nodes: nil>]
124
- ```
125
-
126
- > Chunks are created by partitioning the hypertable data into one
127
- > (or potentially multiple) dimensions. All hypertables are partitions by the
128
- > values belonging to a time column, which may be in timestamp, date, or
129
- > various integer forms. If the time partitioning interval is one day,
130
- > for example, then rows with timestamps that belong to the same day are co-located
131
- > within the same chunk, while rows belonging to different days belong to different chunks.
132
- > Learn more [here](https://docs.timescale.com/timescaledb/latest/overview/core-concepts/hypertables-and-chunks/).
133
-
134
- Another core concept of TimescaleDB is compression. With data partitioned, it
135
- becomes very convenient to compress and decompress chunks independently.
136
-
137
- ```ruby
138
- Tick.hypertable.chunks.first.compress!
139
- ActiveRecord::StatementInvalid: PG::FeatureNotSupported: ERROR: compression not enabled on "ticks"
140
- DETAIL: It is not possible to compress chunks on a hypertable that does not have compression enabled.
141
- HINT: Enable compression using ALTER TABLE with the timescaledb.compress option.
142
- ```
143
-
144
- As compression is not enabled, let's do it by executing plain SQL directly from the actual context. To borrow a connection, let's use the Tick object.
145
-
146
- ```ruby
147
- Tick.connection.execute("ALTER TABLE ticks SET (timescaledb.compress)") # => PG_OK
148
- ```
149
-
150
- And now, it's possible to compress and decompress:
151
-
152
- ```ruby
153
- Tick.hypertable.chunks.first.compress!
154
- Tick.hypertable.chunks.first.decompress!
155
- ```
156
- Learn more about TimescaleDB compression [here](https://docs.timescale.com/timescaledb/latest/overview/core-concepts/compression/).
157
-
158
- The `ohlc_1m` view is also available as an ActiveRecord:
159
-
160
- ```ruby
161
- Ohlc1m
162
- => Timescaledb::Ohlc1m(bucket: datetime, symbol: string, open: decimal, high: decimal, low: decimal, close: decimal, volume: integer)
163
- ```
164
-
165
- And you can run any query as you do with regular active record queries.
166
-
167
- ```ruby
168
- Ohlc1m.order(bucket: :desc).last
169
- => #<Timescaledb::Ohlc1m:0x00007fe99c2c38e0
170
- bucket: 2000-01-01 00:00:00 UTC,
171
- symbol: "SYMBOL",
172
- open: 0.13e2,
173
- high: 0.3e2,
174
- low: 0.1e1,
175
- close: 0.1e2,
176
- volume: 27600>
177
- ```
178
-
Binary file
Binary file
Binary file
data/docs/index.md DELETED
@@ -1,72 +0,0 @@
1
- # The TimescaleDB Ruby Gem
2
-
3
- Welcome to the TimescaleDB gem! To experiment with the code, start installing the
4
- gem:
5
-
6
- ## Installing
7
-
8
- You can install the gem locally:
9
-
10
- ```bash
11
- gem install timescaledb
12
- ```
13
-
14
- Or require it directly in the Gemfile of your project:
15
-
16
- ```ruby
17
- gem "timescaledb"
18
- ```
19
-
20
- ## Features
21
-
22
- * The model can use the [acts_as_hypertable](https://github.com/jonatas/timescaledb/tree/master/lib/timescaledb/acts_as_hypertable.rb) macro. Check more on [models](models) documentation.
23
- * The ActiveRecord [migrations](migrations) can use the [create_table](https://github.com/jonatas/timescaledb/tree/master/lib/timescaledb/migration_helpers.rb) supporting the `hypertable` keyword. It's also enabling you to add retention and continuous aggregates policies
24
- * A standalone `create_hypertable` macro is also allowed in the migrations.
25
- * Testing also becomes easier as the [schema dumper](https://github.com/jonatas/timescaledb/tree/master/lib/timescaledb/schema_dumper.rb) will automatically introduce the hypertables to all environments.
26
- * It also contains a [scenic extension](https://github.com/jonatas/timescaledb/tree/master/lib/timescaledb/scenic/extension.rb) to work with [scenic views](https://github.com/scenic-views/scenic) as it's a wide adoption in the community.
27
- * The gem is also packed with a [command line utility](command_line) that makes it easier to navigate in your database with Pry and all your hypertables available in a Ruby style.
28
-
29
- ## Examples
30
-
31
- The [all_in_one](https://github.com/jonatas/timescaledb/tree/master/examples/all_in_one/all_in_one.rb) example shows:
32
-
33
- 1. Create a hypertable with compression settings
34
- 2. Insert data
35
- 3. Run some queries
36
- 4. Check chunk size per model
37
- 5. Compress a chunk
38
- 6. Check chunk status
39
- 7. Decompress a chunk
40
-
41
- The [ranking](https://github.com/jonatas/timescaledb/tree/master/examples/ranking) example shows how to configure a Rails app and navigate all the features available.
42
-
43
-
44
- ## Toolkit examples
45
-
46
- There are also examples in the [toolkit-demo](https://github.com/jonatas/timescaledb/tree/master/examples/toolkit-demo) folder that can help you to
47
- understand how to properly use the toolkit functions.
48
-
49
- * [ohlc](https://github.com/jonatas/timescaledb/tree/master/examples/toolkit-demo/ohlc.rb) is a funtion that groups data by Open, High, Low, Close and make histogram availables to group the data, very useful for financial analysis.
50
- * While building the [LTTB tutorial]( https://jonatas.github.io/timescaledb/toolkit_lttb_tutorial/) I created the [lttb](https://github.com/jonatas/timescaledb/tree/master/examples/toolkit-demo/lttb) is a simple charting using the Largest Triangle Three Buckets and there. A [zoomable](https://github.com/jonatas/timescaledb/tree/master/examples/toolkit-demo/lttb-zoom) version which allows to navigate in the data and zoom it keeping the same data resolution is also available.
51
- * A small example showing how to process [volatility](https://github.com/jonatas/timescaledb/blob/master/examples/toolkit-demo/compare_volatility.rb) is also good to get familiar with the pipeline functions. A benchmark implementing the same in Ruby is also available to check how it compares to the SQL implementation.
52
-
53
-
54
- ## Extra resources
55
-
56
- If you need extra help, please join the fantastic [timescale community](https://www.timescale.com/community)
57
- or ask your question on [StackOverflow](https://stackoverflow.com/questions/tagged/timescaledb) using the `#timescaledb` tag.
58
-
59
- If you want to go deeper in the library, the [videos](videos) links to all
60
- live-coding sessions showed how [@jonatasdp](https://twitter.com/jonatasdp) built the gem.
61
-
62
- ## Contributing
63
-
64
- Bug reports and pull requests are welcome on GitHub at https://github.com/jonatas/timescaledb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/jonatas/timescaledb/blob/master/CODE_OF_CONDUCT.md).
65
-
66
- ## License
67
-
68
- The gem is available as open source under the [MIT License](https://opensource.org/licenses/MIT).
69
-
70
- ## Code of Conduct
71
-
72
- Everyone interacting in the Timescale project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [code of conduct](https://github.com/jonatas/timescaledb/blob/master/CODE_OF_CONDUCT.md).
data/docs/migrations.md DELETED
@@ -1,76 +0,0 @@
1
- # ActiveRecord migrations helpers for Timescale
2
-
3
- Create table is now with the `hypertable` keyword allowing to pass a few options
4
- to the function call while also using the `create_table` method:
5
-
6
- ## create_table with the `:hypertable` option
7
-
8
- ```ruby
9
- hypertable_options = {
10
- time_column: 'created_at',
11
- chunk_time_interval: '1 min',
12
- compress_segmentby: 'identifier',
13
- compression_interval: '7 days'
14
- }
15
-
16
- create_table(:events, id: false, hypertable: hypertable_options) do |t|
17
- t.string :identifier, null: false
18
- t.jsonb :payload
19
- t.timestamps
20
- end
21
- ```
22
-
23
- ## The `create_continuous_aggregate` helper
24
-
25
- This example shows a ticks table grouping ticks as OHLCV histograms for every
26
- minute.
27
-
28
- ```ruby
29
- hypertable_options = {
30
- time_column: 'created_at',
31
- chunk_time_interval: '1 min',
32
- compress_segmentby: 'symbol',
33
- compress_orderby: 'created_at',
34
- compression_interval: '7 days'
35
- }
36
- create_table :ticks, hypertable: hypertable_options, id: false do |t|
37
- t.string :symbol
38
- t.decimal :price
39
- t.integer :volume
40
- t.timestamps
41
- end
42
- Tick = Class.new(ActiveRecord::Base) do
43
- self.table_name = 'ticks'
44
- self.primary_key = 'symbol'
45
- acts_as_hypertable
46
- end
47
-
48
- query = Tick.select(<<~QUERY)
49
- time_bucket('1m', created_at) as time,
50
- symbol,
51
- FIRST(price, created_at) as open,
52
- MAX(price) as high,
53
- MIN(price) as low,
54
- LAST(price, created_at) as close,
55
- SUM(volume) as volume").group("1,2")
56
- QUERY
57
-
58
- options = {
59
- with_data: false,
60
- refresh_policies: {
61
- start_offset: "INTERVAL '1 month'",
62
- end_offset: "INTERVAL '1 minute'",
63
- schedule_interval: "INTERVAL '1 minute'"
64
- }
65
- }
66
-
67
- create_continuous_aggregate('ohlc_1m', query, **options)
68
- ```
69
-
70
- If you need more details, please check this [blog post][1].
71
-
72
- If you're interested in candlesticks and need to get the OHLC values, take a look
73
- at the [toolkit ohlc](/toolkit_ohlc) function that do the same but through a
74
- function that can be reusing candlesticks from smaller timeframes.
75
-
76
- [1]: https://ideia.me/timescale-continuous-aggregates-with-ruby
data/docs/models.md DELETED
@@ -1,78 +0,0 @@
1
- # Models
2
-
3
- The ActiveRecord is the default ORM in the Ruby community. We have introduced a macro that helps you to inject the behavior as other libraries do in the Rails ecosystem.
4
-
5
- ## The `acts_as_hypertable` macro
6
-
7
- You can declare a Rails model as a Hypertable by invoking the `acts_as_hypertable` macro. This macro extends your existing model with timescaledb-related functionality.
8
- model:
9
-
10
- ```ruby
11
- class Event < ActiveRecord::Base
12
- acts_as_hypertable
13
- end
14
- ```
15
-
16
- By default, ActsAsHypertable assumes a record's _time_column_ is called `created_at`.
17
-
18
- ### Options
19
-
20
- If you are using a different time_column name, you can specify it as follows when invoking the `acts_as_hypertable` macro:
21
-
22
- ```ruby
23
- class Event < ActiveRecord::Base
24
- acts_as_hypertable time_column :timestamp
25
- end
26
- ```
27
-
28
- ### Chunks
29
-
30
- To get all the chunks from a model's hypertable, you can use `.chunks`.
31
-
32
- ```ruby
33
- Event.chunks # => [#<Timescaledb::Chunk>, ...]
34
- ```
35
-
36
- ### Hypertable metadata
37
-
38
- To get the models' hypertable metadata, you can use `.hypertable`.
39
-
40
- ```ruby
41
- Event.hypertable # => #<Timescaledb::Hypertable>
42
- ```
43
-
44
- To get hypertable metadata for all hypertables: `Timescaledb.hypertables`.
45
-
46
- ### Compression Settings
47
-
48
- Compression settings are accessible through the hypertable.
49
-
50
- ```ruby
51
- Event.hypertable.compression_settings # => [#<Timescaledb::CompressionSettings>, ...]
52
- ```
53
-
54
- To get compression settings for all hypertables: `Timescaledb.compression_settings`.
55
-
56
- ### Scopes
57
-
58
- When you enable ActsAsHypertable on your model, we include a few default scopes. They are:
59
-
60
- | Scope name | What they return |
61
- |------------------------|---------------------------------------|
62
- | `Model.previous_month` | Records created in the previous month |
63
- | `Model.previous_week` | Records created in the previous week |
64
- | `Model.this_month` | Records created this month |
65
- | `Model.this_week` | Records created this week |
66
- | `Model.yesterday` | Records created yesterday |
67
- | `Model.today` | Records created today |
68
- | `Model.last_hour` | Records created in the last hour |
69
-
70
- All time-related scopes respect your application's timezone.
71
-
72
-
73
- ## Scenic integration
74
-
75
- The [Scenic](https://github.com/scenic-views/scenic) gem is easy to
76
- manage database view definitions for a Rails application. Unfortunately, TimescaleDB's continuous aggregates are more complex than regular PostgreSQL views, and the schema dumper included with Scenic can't dump a complete definition.
77
-
78
- This gem automatically configures Scenic to use a `Timescaledb::Scenic::Adapter.` which will correctly handle schema dumping.