pg_party 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +15 -9
- data/lib/pg_party/model/list_methods.rb +0 -8
- data/lib/pg_party/model/range_methods.rb +0 -8
- data/lib/pg_party/model/shared_methods.rb +27 -0
- data/lib/pg_party/model_decorator.rb +10 -0
- data/lib/pg_party/model_injector.rb +13 -6
- data/lib/pg_party/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 559a9b103f19cf52a702be11bb98bd0df55935d7
|
4
|
+
data.tar.gz: 3b25f89a601b7f3898fc3de9e901ff021ff97faa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c51bf8b2a408e2167cdbcd61c8e2ee2b8ab259a63017747cad56959a7f7be11504034845bb6b92e383fb7b3abf18082658b449d721619e537ba92a948ededbb4
|
7
|
+
data.tar.gz: 3c4e20e4171bc302a8bd5d2bc4f35bf33b20f4f80ddcf31d256384be02c31cd4d9d3039eba088a37c7edab7d4d92825036627c1d6409ca956f5da6bce4d7ab0a
|
data/README.md
CHANGED
@@ -8,15 +8,13 @@
|
|
8
8
|
[circle]: https://circleci.com/gh/rkrage/pg_party
|
9
9
|
[climate]: https://codeclimate.com/github/rkrage/pg_party
|
10
10
|
|
11
|
-
[
|
11
|
+
[ActiveRecord](http://guides.rubyonrails.org/active_record_basics.html) migrations and model helpers for creating and managing [PostgreSQL 10 partitions](https://www.postgresql.org/docs/10/static/ddl-partitioning.html)!
|
12
12
|
|
13
13
|
Features:
|
14
14
|
- migration methods for partition specific database operations
|
15
15
|
- model methods for querying partitioned data
|
16
16
|
- model methods for creating adhoc partitions
|
17
17
|
|
18
|
-
Note: PostgreSQL 10 is currently in beta. This gem should not be used in production environments (yet).
|
19
|
-
|
20
18
|
## Installation
|
21
19
|
|
22
20
|
Add this line to your application's Gemfile:
|
@@ -98,7 +96,7 @@ Attach an existing table to a range partition:
|
|
98
96
|
```ruby
|
99
97
|
class AttachRangePartition < ActiveRecord::Migration[5.1]
|
100
98
|
def up
|
101
|
-
attach_range_partition(
|
99
|
+
attach_range_partition(:parent_table, :child_table)
|
102
100
|
end
|
103
101
|
end
|
104
102
|
```
|
@@ -108,7 +106,7 @@ Attach an existing table to a list partition:
|
|
108
106
|
```ruby
|
109
107
|
class AttachListPartition < ActiveRecord::Migration[5.1]
|
110
108
|
def up
|
111
|
-
attach_list_partition(
|
109
|
+
attach_list_partition(:parent_table, :child_table)
|
112
110
|
end
|
113
111
|
end
|
114
112
|
```
|
@@ -118,7 +116,7 @@ Detach a child table from any partition:
|
|
118
116
|
```ruby
|
119
117
|
class DetachPartition < ActiveRecord::Migration[5.1]
|
120
118
|
def up
|
121
|
-
detach_partition(
|
119
|
+
detach_partition(:parent_table, :child_table)
|
122
120
|
end
|
123
121
|
end
|
124
122
|
```
|
@@ -175,14 +173,22 @@ SomeRangeRecord.partition_key_eq(Date.current)
|
|
175
173
|
SomeListRecord.partition_key_eq(100)
|
176
174
|
```
|
177
175
|
|
176
|
+
List currently attached partitions:
|
177
|
+
|
178
|
+
```ruby
|
179
|
+
SomeRangeRecord.partitions
|
180
|
+
|
181
|
+
SomeListRecord.partitions
|
182
|
+
```
|
183
|
+
|
178
184
|
Query for records by partition name:
|
179
185
|
|
180
186
|
```ruby
|
181
187
|
# returns a collection of anonymous ActiveRecord::Base subclassed instances
|
182
|
-
SomeRangeRecord.in_partition(
|
188
|
+
SomeRangeRecord.in_partition(:some_range_records_partition_name)
|
183
189
|
|
184
190
|
# returns a collection of anonymous ActiveRecord::Base subclassed instances
|
185
|
-
SomeListRecord.in_partition(
|
191
|
+
SomeListRecord.in_partition(:some_list_records_partition_name)
|
186
192
|
```
|
187
193
|
|
188
194
|
## Development
|
@@ -200,7 +206,7 @@ Install dependencies:
|
|
200
206
|
|
201
207
|
Run the tests:
|
202
208
|
|
203
|
-
$ bin/de rake
|
209
|
+
$ bin/de appraisal rake
|
204
210
|
|
205
211
|
Open a Pry console to play around with the sample Rails app:
|
206
212
|
|
@@ -7,17 +7,9 @@ module PgParty
|
|
7
7
|
PgParty::ModelDecorator.new(self).create_list_partition(*args)
|
8
8
|
end
|
9
9
|
|
10
|
-
def in_partition(*args)
|
11
|
-
PgParty::ModelDecorator.new(self).in_partition(*args)
|
12
|
-
end
|
13
|
-
|
14
10
|
def partition_key_in(*args)
|
15
11
|
PgParty::ModelDecorator.new(self).list_partition_key_in(*args)
|
16
12
|
end
|
17
|
-
|
18
|
-
def partition_key_eq(*args)
|
19
|
-
PgParty::ModelDecorator.new(self).partition_key_eq(*args)
|
20
|
-
end
|
21
13
|
end
|
22
14
|
end
|
23
15
|
end
|
@@ -7,17 +7,9 @@ module PgParty
|
|
7
7
|
PgParty::ModelDecorator.new(self).create_range_partition(*args)
|
8
8
|
end
|
9
9
|
|
10
|
-
def in_partition(*args)
|
11
|
-
PgParty::ModelDecorator.new(self).in_partition(*args)
|
12
|
-
end
|
13
|
-
|
14
10
|
def partition_key_in(*args)
|
15
11
|
PgParty::ModelDecorator.new(self).range_partition_key_in(*args)
|
16
12
|
end
|
17
|
-
|
18
|
-
def partition_key_eq(*args)
|
19
|
-
PgParty::ModelDecorator.new(self).partition_key_eq(*args)
|
20
|
-
end
|
21
13
|
end
|
22
14
|
end
|
23
15
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "pg_party/model_decorator"
|
2
|
+
|
3
|
+
module PgParty
|
4
|
+
module Model
|
5
|
+
module SharedMethods
|
6
|
+
def partitions
|
7
|
+
PgParty::ModelDecorator.new(self).partitions
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_partition(*args)
|
11
|
+
PgParty::ModelDecorator.new(self).create_list_partition(*args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def in_partition(*args)
|
15
|
+
PgParty::ModelDecorator.new(self).in_partition(*args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def partition_key_in(*args)
|
19
|
+
PgParty::ModelDecorator.new(self).list_partition_key_in(*args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def partition_key_eq(*args)
|
23
|
+
PgParty::ModelDecorator.new(self).partition_key_eq(*args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -18,6 +18,16 @@ module PgParty
|
|
18
18
|
where(partition_key_as_arel.in(values.flatten))
|
19
19
|
end
|
20
20
|
|
21
|
+
def partitions
|
22
|
+
connection.select_values(<<-SQL)
|
23
|
+
SELECT pg_inherits.inhrelid::regclass::text
|
24
|
+
FROM pg_tables
|
25
|
+
INNER JOIN pg_inherits
|
26
|
+
ON pg_tables.tablename::regclass = pg_inherits.inhparent::regclass
|
27
|
+
WHERE pg_tables.tablename = #{connection.quote(table_name)}
|
28
|
+
SQL
|
29
|
+
end
|
30
|
+
|
21
31
|
def create_range_partition(start_range:, end_range:, **options)
|
22
32
|
modified_options = options.merge(
|
23
33
|
start_range: start_range,
|
@@ -8,21 +8,28 @@ module PgParty
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def inject_range_methods
|
11
|
-
create_class_attributes
|
12
|
-
|
13
11
|
require "pg_party/model/range_methods"
|
14
|
-
|
12
|
+
|
13
|
+
inject_methods_for(PgParty::Model::RangeMethods)
|
15
14
|
end
|
16
15
|
|
17
16
|
def inject_list_methods
|
18
|
-
create_class_attributes
|
19
|
-
|
20
17
|
require "pg_party/model/list_methods"
|
21
|
-
|
18
|
+
|
19
|
+
inject_methods_for(PgParty::Model::ListMethods)
|
22
20
|
end
|
23
21
|
|
24
22
|
private
|
25
23
|
|
24
|
+
def inject_methods_for(mod)
|
25
|
+
require "pg_party/model/shared_methods"
|
26
|
+
|
27
|
+
@model.extend(PgParty::Model::SharedMethods)
|
28
|
+
@model.extend(mod)
|
29
|
+
|
30
|
+
create_class_attributes
|
31
|
+
end
|
32
|
+
|
26
33
|
def create_class_attributes
|
27
34
|
@model.class_attribute(
|
28
35
|
:partition_key,
|
data/lib/pg_party/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_party
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Krage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- lib/pg_party/model/list_methods.rb
|
196
196
|
- lib/pg_party/model/methods.rb
|
197
197
|
- lib/pg_party/model/range_methods.rb
|
198
|
+
- lib/pg_party/model/shared_methods.rb
|
198
199
|
- lib/pg_party/model_decorator.rb
|
199
200
|
- lib/pg_party/model_injector.rb
|
200
201
|
- lib/pg_party/version.rb
|
@@ -218,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
219
|
version: 1.8.11
|
219
220
|
requirements: []
|
220
221
|
rubyforge_project:
|
221
|
-
rubygems_version: 2.
|
222
|
+
rubygems_version: 2.4.5
|
222
223
|
signing_key:
|
223
224
|
specification_version: 4
|
224
225
|
summary: ActiveRecord PostgreSQL Partitioning
|