pgslice 0.1.2 → 0.1.3
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/CHANGELOG.md +4 -0
- data/README.md +18 -4
- data/lib/pgslice/version.rb +1 -1
- data/lib/pgslice.rb +10 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27fdf533604b2635d75b2eb92043617f8a53ed7a
|
4
|
+
data.tar.gz: 5f5579762fdfe759f38a4eb03cce91acb90a7397
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac1abb9261c93e8b0bf057b6b16fd1a864f3e2ddd9b85f196df095731fbbbdac0b49e3878b966632c15ce9d7c6774d64231dc03d2e4a42b74fd185ffc177a8b5
|
7
|
+
data.tar.gz: 9524851474990255e54c008477db65de535fcea6412900ea0c68a801518a79b7124175cde7cddd5e932a6575c76d282047642d7c8f4016e6cce13fd703a90877
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -93,7 +93,7 @@ $ pgslice prep locations created_at day
|
|
93
93
|
BEGIN;
|
94
94
|
|
95
95
|
CREATE TABLE locations_intermediate (
|
96
|
-
LIKE locations INCLUDING
|
96
|
+
LIKE locations INCLUDING ALL
|
97
97
|
);
|
98
98
|
|
99
99
|
CREATE FUNCTION locations_insert_trigger()
|
@@ -116,20 +116,29 @@ $ pgslice add_partitions locations --intermediate --past 1 --future 1
|
|
116
116
|
BEGIN;
|
117
117
|
|
118
118
|
CREATE TABLE locations_20160423 (
|
119
|
-
LIKE locations_intermediate INCLUDING INDEXES INCLUDING DEFAULTS,
|
120
119
|
CHECK (created_at >= '2016-04-23'::date AND created_at < '2016-04-24'::date)
|
121
120
|
) INHERITS (locations_intermediate);
|
122
121
|
|
122
|
+
ALTER TABLE locations_20160423 ADD PRIMARY KEY (id);
|
123
|
+
|
124
|
+
CREATE INDEX ON locations_20160423 USING btree (updated_at, shopper_id);
|
125
|
+
|
123
126
|
CREATE TABLE locations_20160424 (
|
124
|
-
LIKE locations_intermediate INCLUDING INDEXES INCLUDING DEFAULTS,
|
125
127
|
CHECK (created_at >= '2016-04-24'::date AND created_at < '2016-04-25'::date)
|
126
128
|
) INHERITS (locations_intermediate);
|
127
129
|
|
130
|
+
ALTER TABLE locations_20160424 ADD PRIMARY KEY (id);
|
131
|
+
|
132
|
+
CREATE INDEX ON locations_20160424 USING btree (updated_at, shopper_id);
|
133
|
+
|
128
134
|
CREATE TABLE locations_20160425 (
|
129
|
-
LIKE locations_intermediate INCLUDING INDEXES INCLUDING DEFAULTS,
|
130
135
|
CHECK (created_at >= '2016-04-25'::date AND created_at < '2016-04-26'::date)
|
131
136
|
) INHERITS (locations_intermediate);
|
132
137
|
|
138
|
+
ALTER TABLE locations_20160425 ADD PRIMARY KEY (id);
|
139
|
+
|
140
|
+
CREATE INDEX ON locations_20160425 USING btree (updated_at, shopper_id);
|
141
|
+
|
133
142
|
COMMIT;
|
134
143
|
```
|
135
144
|
|
@@ -159,6 +168,11 @@ gem install specific_install
|
|
159
168
|
gem specific_install ankane/pgslice
|
160
169
|
```
|
161
170
|
|
171
|
+
## TODO
|
172
|
+
|
173
|
+
- Command to sync index changes with partitions
|
174
|
+
- Disable indexing for faster `fill`
|
175
|
+
|
162
176
|
## Contributing
|
163
177
|
|
164
178
|
Everyone is encouraged to help improve this project. Here are a few ways you can help:
|
data/lib/pgslice/version.rb
CHANGED
data/lib/pgslice.rb
CHANGED
@@ -63,7 +63,7 @@ module PgSlice
|
|
63
63
|
|
64
64
|
queries << <<-SQL
|
65
65
|
CREATE TABLE #{intermediate_table} (
|
66
|
-
LIKE #{table} INCLUDING
|
66
|
+
LIKE #{table} INCLUDING ALL
|
67
67
|
);
|
68
68
|
SQL
|
69
69
|
|
@@ -122,6 +122,9 @@ FOR EACH ROW EXECUTE PROCEDURE #{trigger_name}();
|
|
122
122
|
days = range.map { |n| today + (n * inc) }
|
123
123
|
queries = []
|
124
124
|
|
125
|
+
index_defs = execute("select pg_get_indexdef(indexrelid) from pg_index where indrelid = $1::regclass AND indisprimary = 'f'", [original_table]).map { |r| r["pg_get_indexdef"] }
|
126
|
+
primary_key = self.primary_key(table)
|
127
|
+
|
125
128
|
days.each do |day|
|
126
129
|
partition_name = "#{original_table}_#{day.strftime(name_format)}"
|
127
130
|
next if table_exists?(partition_name)
|
@@ -130,10 +133,15 @@ FOR EACH ROW EXECUTE PROCEDURE #{trigger_name}();
|
|
130
133
|
|
131
134
|
queries << <<-SQL
|
132
135
|
CREATE TABLE #{partition_name} (
|
133
|
-
LIKE #{table} INCLUDING INDEXES INCLUDING DEFAULTS,
|
134
136
|
CHECK (#{field} >= '#{day.strftime(date_format)}'::date AND #{field} < '#{(day + inc).strftime(date_format)}'::date)
|
135
137
|
) INHERITS (#{table});
|
136
138
|
SQL
|
139
|
+
|
140
|
+
queries << "ALTER TABLE #{partition_name} ADD PRIMARY KEY (#{primary_key});"
|
141
|
+
|
142
|
+
index_defs.each do |index_def|
|
143
|
+
queries << index_def.sub(" ON #{original_table} USING ", " ON #{partition_name} USING ").sub(/ INDEX .+ ON /, " INDEX ON ") + ";"
|
144
|
+
end
|
137
145
|
end
|
138
146
|
|
139
147
|
run_queries(queries) if queries.any?
|