pgslice 0.1.0 → 0.1.1
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 +7 -0
- data/README.md +4 -2
- data/lib/pgslice.rb +29 -25
- data/lib/pgslice/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a7f188ff426286b8fd13dbc359d7bbdf514de64
|
4
|
+
data.tar.gz: bf65c37948a1cbd88e072f7c88b20e0cf4b75b1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cece21cd4d7bb10fcf510fa6ba6a1590ba24faaaf553315c1a0c2f2d734a39b77ac9fa419168eb75a09f6f7851bf1b62ab0f1cb59774daa6832b4a7e6ed3559
|
7
|
+
data.tar.gz: 1a820b128546c65a697c32d928955734bac43123af7bc714839530e1bfcb3ce06c61ac7d454caf1e92a2d8a188267dc94910e5ceb25ce0db2b23eb0a0c130cc5
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Postgres partitioning as easy as pie
|
|
4
4
|
|
5
5
|
## Install
|
6
6
|
|
7
|
-
Run
|
7
|
+
Run:
|
8
8
|
|
9
9
|
```sh
|
10
10
|
gem install pgslice
|
@@ -64,13 +64,15 @@ gem install pgslice
|
|
64
64
|
|
65
65
|
## Adding Partitions
|
66
66
|
|
67
|
+
To add partitions, use:
|
68
|
+
|
67
69
|
```sh
|
68
70
|
pgslice add_partitions <table> --future 3
|
69
71
|
```
|
70
72
|
|
71
73
|
## Additional Commands
|
72
74
|
|
73
|
-
To undo prep
|
75
|
+
To undo prep (which will delete partitions), use:
|
74
76
|
|
75
77
|
```sh
|
76
78
|
pgslice unprep <table>
|
data/lib/pgslice.rb
CHANGED
@@ -64,26 +64,26 @@ module PgSlice
|
|
64
64
|
queries = []
|
65
65
|
|
66
66
|
queries << <<-SQL
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
CREATE TABLE #{intermediate_table} (
|
68
|
+
LIKE #{table} INCLUDING INDEXES INCLUDING DEFAULTS
|
69
|
+
);
|
70
70
|
SQL
|
71
71
|
|
72
72
|
sql_format = SQL_FORMAT[period.to_sym]
|
73
73
|
queries << <<-SQL
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
74
|
+
CREATE FUNCTION #{trigger_name}()
|
75
|
+
RETURNS trigger AS $$
|
76
|
+
BEGIN
|
77
|
+
EXECUTE 'INSERT INTO public.#{table}_' || to_char(NEW.#{column}, '#{sql_format}') || ' VALUES ($1.*)' USING NEW;
|
78
|
+
RETURN NULL;
|
79
|
+
END;
|
80
|
+
$$ LANGUAGE plpgsql;
|
81
81
|
SQL
|
82
82
|
|
83
83
|
queries << <<-SQL
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
CREATE TRIGGER #{trigger_name}
|
85
|
+
BEFORE INSERT ON #{intermediate_table}
|
86
|
+
FOR EACH ROW EXECUTE PROCEDURE #{trigger_name}();
|
87
87
|
SQL
|
88
88
|
|
89
89
|
run_queries(queries)
|
@@ -100,8 +100,8 @@ module PgSlice
|
|
100
100
|
log "Dropping #{intermediate_table}"
|
101
101
|
|
102
102
|
queries = [
|
103
|
-
"DROP TABLE #{intermediate_table} CASCADE",
|
104
|
-
"DROP FUNCTION #{trigger_name}()"
|
103
|
+
"DROP TABLE #{intermediate_table} CASCADE;",
|
104
|
+
"DROP FUNCTION #{trigger_name}();"
|
105
105
|
]
|
106
106
|
run_queries(queries)
|
107
107
|
end
|
@@ -134,10 +134,10 @@ module PgSlice
|
|
134
134
|
date_format = "%Y-%m-%d"
|
135
135
|
|
136
136
|
queries << <<-SQL
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
137
|
+
CREATE TABLE #{partition_name} (
|
138
|
+
LIKE #{table} INCLUDING INDEXES INCLUDING DEFAULTS,
|
139
|
+
CHECK (#{field} >= '#{day.strftime(date_format)}'::date AND #{field} < '#{(day + inc).strftime(date_format)}'::date)
|
140
|
+
) INHERITS (#{table});
|
141
141
|
SQL
|
142
142
|
end
|
143
143
|
|
@@ -209,8 +209,8 @@ module PgSlice
|
|
209
209
|
log "Renaming #{intermediate_table} to #{table}"
|
210
210
|
|
211
211
|
queries = [
|
212
|
-
"ALTER TABLE #{table} RENAME TO #{retired_table}",
|
213
|
-
"ALTER TABLE #{intermediate_table} RENAME TO #{table}"
|
212
|
+
"ALTER TABLE #{table} RENAME TO #{retired_table};",
|
213
|
+
"ALTER TABLE #{intermediate_table} RENAME TO #{table};"
|
214
214
|
]
|
215
215
|
run_queries(queries)
|
216
216
|
end
|
@@ -229,8 +229,8 @@ module PgSlice
|
|
229
229
|
log "Renaming #{retired_table} to #{table}"
|
230
230
|
|
231
231
|
queries = [
|
232
|
-
"ALTER TABLE #{table} RENAME TO #{intermediate_table}",
|
233
|
-
"ALTER TABLE #{retired_table} RENAME TO #{table}"
|
232
|
+
"ALTER TABLE #{table} RENAME TO #{intermediate_table};",
|
233
|
+
"ALTER TABLE #{retired_table} RENAME TO #{table};"
|
234
234
|
]
|
235
235
|
run_queries(queries)
|
236
236
|
end
|
@@ -259,7 +259,7 @@ module PgSlice
|
|
259
259
|
|
260
260
|
# output
|
261
261
|
|
262
|
-
def log(message)
|
262
|
+
def log(message = nil)
|
263
263
|
$stderr.puts message
|
264
264
|
end
|
265
265
|
|
@@ -294,7 +294,11 @@ module PgSlice
|
|
294
294
|
def run_queries(queries)
|
295
295
|
connection.transaction do
|
296
296
|
execute("SET client_min_messages TO warning")
|
297
|
-
|
297
|
+
log
|
298
|
+
log "============================== SQL =============================="
|
299
|
+
queries.each do |query|
|
300
|
+
log
|
301
|
+
log query
|
298
302
|
execute(query)
|
299
303
|
end
|
300
304
|
end
|
data/lib/pgslice/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgslice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -89,6 +89,7 @@ extensions: []
|
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
91
|
- ".gitignore"
|
92
|
+
- CHANGELOG.md
|
92
93
|
- Gemfile
|
93
94
|
- README.md
|
94
95
|
- Rakefile
|