pgslice 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/lib/pgslice.rb +17 -9
- data/lib/pgslice/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07d87eec1238827086898708a5b4e026746a0c11
|
4
|
+
data.tar.gz: 76024edd24065ec3e24b74d72563583e01cecc6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c6042dc4fe0d093c3b38c05d91b445ad1882241f5c3b814f4fe7124ae3609b591ead4d70de39ebf496164e72221ffb409703173689a0daa6f37f884e73dce45
|
7
|
+
data.tar.gz: b79e389ab3529ad08eadb2e18b6c374d40436007e4fe788e2898888e5caf5592b3839326fee9c4d8d658bbfd284c0c953683171d8789de826b86fa79b7d3354c
|
data/CHANGELOG.md
CHANGED
data/lib/pgslice.rb
CHANGED
@@ -112,7 +112,7 @@ SQL
|
|
112
112
|
|
113
113
|
queries = [
|
114
114
|
"DROP TABLE #{quote_ident(intermediate_table)} CASCADE;",
|
115
|
-
"DROP FUNCTION IF EXISTS #{trigger_name}();"
|
115
|
+
"DROP FUNCTION IF EXISTS #{quote_ident(trigger_name)}();"
|
116
116
|
]
|
117
117
|
run_queries(queries)
|
118
118
|
end
|
@@ -132,7 +132,7 @@ SQL
|
|
132
132
|
# ensure table has trigger
|
133
133
|
abort "No trigger on table: #{table}\nDid you mean to use --intermediate?" unless has_trigger?(trigger_name, table)
|
134
134
|
|
135
|
-
index_defs = execute("SELECT pg_get_indexdef(indexrelid) FROM pg_index
|
135
|
+
index_defs = execute("SELECT pg_get_indexdef(indexrelid) FROM pg_index WHERE indrelid = #{regclass(schema, original_table)} AND indisprimary = 'f'").map { |r| r["pg_get_indexdef"] }
|
136
136
|
primary_key = self.primary_key(table)
|
137
137
|
|
138
138
|
queries = []
|
@@ -163,7 +163,7 @@ CREATE TABLE #{quote_ident(partition_name)}
|
|
163
163
|
queries << "ALTER TABLE #{quote_ident(partition_name)} ADD PRIMARY KEY (#{quote_ident(primary_key)});" if primary_key
|
164
164
|
|
165
165
|
index_defs.each do |index_def|
|
166
|
-
queries << index_def.sub(
|
166
|
+
queries << index_def.sub(/ ON \S+ USING /, " ON #{quote_ident(partition_name)} USING ").sub(/ INDEX .+ ON /, " INDEX ON ") + ";"
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
@@ -172,7 +172,7 @@ CREATE TABLE #{quote_ident(partition_name)}
|
|
172
172
|
future_defs = []
|
173
173
|
past_defs = []
|
174
174
|
name_format = self.name_format(period)
|
175
|
-
existing_tables =
|
175
|
+
existing_tables = existing_partitions(original_table)
|
176
176
|
existing_tables = (existing_tables + added_partitions).uniq.sort
|
177
177
|
|
178
178
|
existing_tables.each do |table|
|
@@ -236,7 +236,7 @@ CREATE OR REPLACE FUNCTION #{quote_ident(trigger_name)}()
|
|
236
236
|
if period
|
237
237
|
name_format = self.name_format(period)
|
238
238
|
|
239
|
-
existing_tables =
|
239
|
+
existing_tables = existing_partitions(table)
|
240
240
|
if existing_tables.any?
|
241
241
|
starting_time = DateTime.strptime(existing_tables.first.split("_").last, name_format)
|
242
242
|
ending_time = advance_date(DateTime.strptime(existing_tables.last.split("_").last, name_format), period, 1)
|
@@ -315,7 +315,7 @@ INSERT INTO #{quote_ident(dest_table)} (#{fields})
|
|
315
315
|
]
|
316
316
|
|
317
317
|
self.sequences(table).each do |sequence|
|
318
|
-
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{table}.#{sequence["related_column"]};"
|
318
|
+
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_ident(table)}.#{quote_ident(sequence["related_column"])};"
|
319
319
|
end
|
320
320
|
|
321
321
|
queries.unshift("SET LOCAL lock_timeout = '#{options[:lock_timeout]}';") if server_version_num >= 90300
|
@@ -339,7 +339,7 @@ INSERT INTO #{quote_ident(dest_table)} (#{fields})
|
|
339
339
|
]
|
340
340
|
|
341
341
|
self.sequences(table).each do |sequence|
|
342
|
-
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{table}.#{sequence["related_column"]};"
|
342
|
+
queries << "ALTER SEQUENCE #{quote_ident(sequence["sequence_name"])} OWNED BY #{quote_ident(table)}.#{quote_ident(sequence["related_column"])};"
|
343
343
|
end
|
344
344
|
|
345
345
|
run_queries(queries)
|
@@ -351,7 +351,7 @@ INSERT INTO #{quote_ident(dest_table)} (#{fields})
|
|
351
351
|
|
352
352
|
abort "Usage: pgslice analyze <table>" if arguments.length != 1
|
353
353
|
|
354
|
-
existing_tables =
|
354
|
+
existing_tables = existing_partitions(table)
|
355
355
|
analyze_list = existing_tables + [parent_table]
|
356
356
|
run_queries_without_transaction analyze_list.map { |t| "ANALYZE VERBOSE #{quote_ident(t)};" }
|
357
357
|
end
|
@@ -464,6 +464,10 @@ INSERT INTO #{quote_ident(dest_table)} (#{fields})
|
|
464
464
|
execute("SHOW server_version_num")[0]["server_version_num"].to_i
|
465
465
|
end
|
466
466
|
|
467
|
+
def existing_partitions(table)
|
468
|
+
existing_tables(like: "#{table}_%").select { |t| /\A#{Regexp.escape("#{table}_")}\d{6,8}\z/.match(t) }
|
469
|
+
end
|
470
|
+
|
467
471
|
def existing_tables(like:)
|
468
472
|
query = "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = $1 AND tablename LIKE $2"
|
469
473
|
execute(query, [schema, like]).map { |r| r["tablename"] }.sort
|
@@ -599,8 +603,12 @@ INSERT INTO #{quote_ident(dest_table)} (#{fields})
|
|
599
603
|
PG::Connection.quote_ident(value)
|
600
604
|
end
|
601
605
|
|
606
|
+
def regclass(schema, table)
|
607
|
+
"'#{quote_ident(schema)}.#{quote_ident(table)}'::regclass"
|
608
|
+
end
|
609
|
+
|
602
610
|
def fetch_trigger(trigger_name, table)
|
603
|
-
execute("SELECT obj_description(oid, 'pg_trigger') AS comment FROM pg_trigger WHERE tgname = $1 AND
|
611
|
+
execute("SELECT obj_description(oid, 'pg_trigger') AS comment FROM pg_trigger WHERE tgname = $1 AND tgrelid = #{regclass(schema, table)}", [trigger_name])[0]
|
604
612
|
end
|
605
613
|
|
606
614
|
def settings_from_trigger(original_table, table)
|
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.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|