pgslice 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +3 -3
- data/lib/pgslice/cli/add_partitions.rb +5 -2
- data/lib/pgslice/cli/swap.rb +1 -1
- data/lib/pgslice/cli/unswap.rb +1 -1
- data/lib/pgslice/helpers.rb +5 -1
- data/lib/pgslice/table.rb +10 -7
- data/lib/pgslice/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73d406b68757fa95efcc58a98249f9a8394cab3408a9ae14ef642983720f44b3
|
4
|
+
data.tar.gz: 7952c9aaa1734c76260b76a59822a4065e6184ac01bf3b1916bd217f7b368403
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 057aeaddcf952f2bb99f657f290e03f2ec3bac2deffce0d7701a7549418d7d8211b2454cbc71039226b369fc5b355d7ad426df0c4ce032d660e8ce09ebe15eab
|
7
|
+
data.tar.gz: a36f9db976f72cc656e289ff5af6ebb89657eb739fb6ca1bc4ccba652fdfa8b93894bc2e3fde5a9fdcd63d53a24574347a280af60157d124445a565810b9839c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -171,7 +171,7 @@ ALTER TABLE "public"."visits" RENAME TO "visits_retired";
|
|
171
171
|
|
172
172
|
ALTER TABLE "public"."visits_intermediate" RENAME TO "visits";
|
173
173
|
|
174
|
-
ALTER SEQUENCE "visits_id_seq" OWNED BY "public"."visits"."id";
|
174
|
+
ALTER SEQUENCE "public"."visits_id_seq" OWNED BY "public"."visits"."id";
|
175
175
|
|
176
176
|
COMMIT;
|
177
177
|
```
|
@@ -383,14 +383,14 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
|
|
383
383
|
- Write, clarify, or fix documentation
|
384
384
|
- Suggest or add new features
|
385
385
|
|
386
|
-
To get started with development
|
386
|
+
To get started with development:
|
387
387
|
|
388
388
|
```sh
|
389
389
|
git clone https://github.com/ankane/pgslice.git
|
390
390
|
cd pgslice
|
391
391
|
bundle install
|
392
392
|
createdb pgslice_test
|
393
|
-
bundle exec rake
|
393
|
+
bundle exec rake test
|
394
394
|
```
|
395
395
|
|
396
396
|
To test against different versions of Postgres with Docker, use:
|
@@ -4,6 +4,7 @@ module PgSlice
|
|
4
4
|
option :intermediate, type: :boolean, default: false, desc: "Add to intermediate table"
|
5
5
|
option :past, type: :numeric, default: 0, desc: "Number of past partitions to add"
|
6
6
|
option :future, type: :numeric, default: 0, desc: "Number of future partitions to add"
|
7
|
+
option :tablespace, type: :string, default: "", desc: "Tablespace to use"
|
7
8
|
def add_partitions(table)
|
8
9
|
original_table = create_table(table)
|
9
10
|
table = options[:intermediate] ? original_table.intermediate_table : original_table
|
@@ -13,6 +14,7 @@ module PgSlice
|
|
13
14
|
|
14
15
|
future = options[:future]
|
15
16
|
past = options[:past]
|
17
|
+
tablespace = options[:tablespace]
|
16
18
|
range = (-1 * past)..future
|
17
19
|
|
18
20
|
period, field, cast, needs_comment, declarative, version = table.fetch_settings(original_table.trigger_name)
|
@@ -50,6 +52,7 @@ module PgSlice
|
|
50
52
|
end
|
51
53
|
|
52
54
|
primary_key = schema_table.primary_key
|
55
|
+
tablespace_str = tablespace.empty? ? "" : " TABLESPACE #{quote_ident(tablespace)}"
|
53
56
|
|
54
57
|
added_partitions = []
|
55
58
|
range.each do |n|
|
@@ -61,13 +64,13 @@ module PgSlice
|
|
61
64
|
|
62
65
|
if declarative
|
63
66
|
queries << <<-SQL
|
64
|
-
CREATE TABLE #{quote_table(partition)} PARTITION OF #{quote_table(table)} FOR VALUES FROM (#{sql_date(day, cast, false)}) TO (#{sql_date(advance_date(day, period, 1), cast, false)});
|
67
|
+
CREATE TABLE #{quote_table(partition)} PARTITION OF #{quote_table(table)} FOR VALUES FROM (#{sql_date(day, cast, false)}) TO (#{sql_date(advance_date(day, period, 1), cast, false)})#{tablespace_str};
|
65
68
|
SQL
|
66
69
|
else
|
67
70
|
queries << <<-SQL
|
68
71
|
CREATE TABLE #{quote_table(partition)}
|
69
72
|
(CHECK (#{quote_ident(field)} >= #{sql_date(day, cast)} AND #{quote_ident(field)} < #{sql_date(advance_date(day, period, 1), cast)}))
|
70
|
-
INHERITS (#{quote_table(table)});
|
73
|
+
INHERITS (#{quote_table(table)})#{tablespace_str};
|
71
74
|
SQL
|
72
75
|
end
|
73
76
|
|
data/lib/pgslice/cli/swap.rb
CHANGED
@@ -17,7 +17,7 @@ module PgSlice
|
|
17
17
|
]
|
18
18
|
|
19
19
|
table.sequences.each do |sequence|
|
20
|
-
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_table(table)}.#{quote_ident(sequence["related_column"])};"
|
20
|
+
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_schema"])}.#{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_table(table)}.#{quote_ident(sequence["related_column"])};"
|
21
21
|
end
|
22
22
|
|
23
23
|
queries.unshift("SET LOCAL lock_timeout = '#{options[:lock_timeout]}';") if server_version_num >= 90300
|
data/lib/pgslice/cli/unswap.rb
CHANGED
@@ -16,7 +16,7 @@ module PgSlice
|
|
16
16
|
]
|
17
17
|
|
18
18
|
table.sequences.each do |sequence|
|
19
|
-
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_table(table)}.#{quote_ident(sequence["related_column"])};"
|
19
|
+
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_schema"])}.#{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_table(table)}.#{quote_ident(sequence["related_column"])};"
|
20
20
|
end
|
21
21
|
|
22
22
|
run_queries(queries)
|
data/lib/pgslice/helpers.rb
CHANGED
@@ -36,7 +36,11 @@ module PgSlice
|
|
36
36
|
uri.query = URI.encode_www_form(params)
|
37
37
|
|
38
38
|
ENV["PGCONNECT_TIMEOUT"] ||= "1"
|
39
|
-
PG::Connection.new(uri.to_s)
|
39
|
+
conn = PG::Connection.new(uri.to_s)
|
40
|
+
conn.set_notice_processor do |message|
|
41
|
+
say message
|
42
|
+
end
|
43
|
+
conn
|
40
44
|
end
|
41
45
|
rescue PG::ConnectionBad => e
|
42
46
|
abort e.message
|
data/lib/pgslice/table.rb
CHANGED
@@ -23,15 +23,17 @@ module PgSlice
|
|
23
23
|
def sequences
|
24
24
|
query = <<-SQL
|
25
25
|
SELECT
|
26
|
-
a.attname
|
27
|
-
|
26
|
+
a.attname AS related_column,
|
27
|
+
n.nspname AS sequence_schema,
|
28
|
+
s.relname AS sequence_name
|
28
29
|
FROM pg_class s
|
29
|
-
JOIN pg_depend d ON d.objid = s.oid
|
30
|
-
JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid
|
31
|
-
JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
|
32
|
-
JOIN pg_namespace n ON n.oid = s.relnamespace
|
30
|
+
INNER JOIN pg_depend d ON d.objid = s.oid
|
31
|
+
INNER JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid
|
32
|
+
INNER JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
|
33
|
+
INNER JOIN pg_namespace n ON n.oid = s.relnamespace
|
34
|
+
INNER JOIN pg_namespace nt ON nt.oid = t.relnamespace
|
33
35
|
WHERE s.relkind = 'S'
|
34
|
-
AND
|
36
|
+
AND nt.nspname = $1
|
35
37
|
AND t.relname = $2
|
36
38
|
ORDER BY s.relname ASC
|
37
39
|
SQL
|
@@ -109,6 +111,7 @@ module PgSlice
|
|
109
111
|
(execute(query)[0]["min"] || 1).to_i
|
110
112
|
end
|
111
113
|
|
114
|
+
# ensure this returns partitions in the correct order
|
112
115
|
def partitions
|
113
116
|
query = <<-SQL
|
114
117
|
SELECT
|
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.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|