multitenancy_tools 0.1.11 → 0.1.12
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4856c5976dee593214b6b38ae73a1f0c2c0d3c2e
|
4
|
+
data.tar.gz: 9a37b22e130a50d8fc5dc472635091e1febc3a87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e78755759a2c2852385ca94aefd8f376daf8b86f46bd3439c1562dda8dca7e647896c1dcdb3af735b5905a79e1b9be5656914afbfd8ce94d034647ed776a772
|
7
|
+
data.tar.gz: 595e5b7f7ac6860bb41aa05b17534b3c1c312b06161ecb46f4feed3164ce5a182be68a34a46ad2fcb2b248d90b28a9575a0df035f1278ead35ac256007709b83
|
data/lib/multitenancy_tools.rb
CHANGED
@@ -8,6 +8,7 @@ require 'multitenancy_tools/schema_switcher'
|
|
8
8
|
require 'multitenancy_tools/schema_destroyer'
|
9
9
|
require 'multitenancy_tools/functions_dumper'
|
10
10
|
require 'multitenancy_tools/schema_migrator'
|
11
|
+
require 'multitenancy_tools/extensions_dumper'
|
11
12
|
|
12
13
|
module MultitenancyTools
|
13
14
|
# Creates a new schema using the SQL file as template. This SQL file can be
|
@@ -61,4 +62,13 @@ module MultitenancyTools
|
|
61
62
|
def self.dump_table(database, schema, table, file, **args)
|
62
63
|
TableDumper.new(database, schema, table).dump_to(file, **args)
|
63
64
|
end
|
65
|
+
|
66
|
+
# Generates a SQL dump of all extensions enabled on the database.
|
67
|
+
#
|
68
|
+
# @see ExtensionsDumper
|
69
|
+
# @param file [String]
|
70
|
+
# @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
|
71
|
+
def self.dump_extensions(file, connection = ActiveRecord::Base.connection, **args)
|
72
|
+
ExtensionsDumper.new(connection).dump_to(file, **args)
|
73
|
+
end
|
64
74
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module MultitenancyTools
|
2
|
+
# {ExtensionsDumper} can be used to generate a SQL dump of all extensions that
|
3
|
+
# are enabled on a PostgreSQL database.
|
4
|
+
#
|
5
|
+
# @example
|
6
|
+
# dumper = MultitenancyTools::ExtensionsDumper.new
|
7
|
+
# dumper.dump_to('path/to/file.sql')
|
8
|
+
class ExtensionsDumper
|
9
|
+
EXTENSION_SQL = <<-'SQL'.freeze
|
10
|
+
SELECT extname, nspname FROM pg_catalog.pg_extension
|
11
|
+
JOIN pg_catalog.pg_namespace n ON (extnamespace = n.oid)
|
12
|
+
SQL
|
13
|
+
|
14
|
+
CREATE_EXTENSION_SQL = 'CREATE EXTENSION IF NOT EXISTS "%s" WITH SCHEMA %s;'.freeze
|
15
|
+
|
16
|
+
# @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
|
17
|
+
def initialize(connection = ActiveRecord::Base.connection)
|
18
|
+
@connection = connection
|
19
|
+
end
|
20
|
+
|
21
|
+
# Generates a dump and writes it into a file. Please see {IO.new} for open
|
22
|
+
# modes.
|
23
|
+
#
|
24
|
+
# @see http://ruby-doc.org/core-2.2.2/IO.html#method-c-new-label-Open+Mode
|
25
|
+
# IO Open Modes
|
26
|
+
# @param file [String] file path
|
27
|
+
# @param mode [String] IO open mode
|
28
|
+
def dump_to(file, mode: 'w')
|
29
|
+
results = @connection.execute(EXTENSION_SQL)
|
30
|
+
|
31
|
+
File.open(file, mode) do |f|
|
32
|
+
results.each do |result|
|
33
|
+
name = result.fetch('extname')
|
34
|
+
schema = result.fetch('nspname')
|
35
|
+
|
36
|
+
f.puts(format(CREATE_EXTENSION_SQL, name, schema))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -2,10 +2,23 @@ module MultitenancyTools
|
|
2
2
|
# {FunctionsDumper} can be used to generate a SQL dump of all functions that
|
3
3
|
# are present on a PostgreSQL schema.
|
4
4
|
#
|
5
|
+
# Please note that C functions are not included in the dump.
|
6
|
+
#
|
5
7
|
# @example
|
6
8
|
# dumper = MultitenancyTools::FunctionsDumper.new('schema name')
|
7
9
|
# dumper.dump_to('path/to/file.sql')
|
8
10
|
class FunctionsDumper
|
11
|
+
FUNCTIONS_SQL = <<-SQL.freeze
|
12
|
+
SELECT
|
13
|
+
trim(trailing e' \n' from pg_get_functiondef(f.oid)) || ';'
|
14
|
+
AS definition
|
15
|
+
FROM pg_catalog.pg_proc f
|
16
|
+
JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
|
17
|
+
JOIN pg_catalog.pg_language l ON (f.prolang = l.oid)
|
18
|
+
WHERE n.nspname = %s
|
19
|
+
AND l.lanname != 'c';
|
20
|
+
SQL
|
21
|
+
|
9
22
|
# @param schema [String] schema name
|
10
23
|
# @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
|
11
24
|
def initialize(schema, connection = ActiveRecord::Base.connection)
|
@@ -21,18 +34,11 @@ module MultitenancyTools
|
|
21
34
|
# @param file [String] file path
|
22
35
|
# @param mode [String] IO open mode
|
23
36
|
def dump_to(file, mode: 'w')
|
24
|
-
results = @connection.execute(
|
25
|
-
SELECT
|
26
|
-
trim(trailing e' \n' from pg_get_functiondef(f.oid)) || ';\n'
|
27
|
-
AS definition
|
28
|
-
FROM pg_catalog.pg_proc f
|
29
|
-
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
|
30
|
-
WHERE n.nspname = #{@schema};
|
31
|
-
SQL
|
37
|
+
results = @connection.execute(format(FUNCTIONS_SQL, @schema))
|
32
38
|
|
33
39
|
File.open(file, mode) do |f|
|
34
40
|
results.each do |result|
|
35
|
-
f.
|
41
|
+
f.puts result.fetch('definition')
|
36
42
|
end
|
37
43
|
end
|
38
44
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multitenancy_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lenon Marcel
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-12-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activerecord
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/multitenancy_tools.rb
|
148
148
|
- lib/multitenancy_tools/dump_cleaner.rb
|
149
149
|
- lib/multitenancy_tools/errors.rb
|
150
|
+
- lib/multitenancy_tools/extensions_dumper.rb
|
150
151
|
- lib/multitenancy_tools/functions_dumper.rb
|
151
152
|
- lib/multitenancy_tools/schema_creator.rb
|
152
153
|
- lib/multitenancy_tools/schema_destroyer.rb
|
@@ -176,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
177
|
version: '0'
|
177
178
|
requirements: []
|
178
179
|
rubyforge_project:
|
179
|
-
rubygems_version: 2.4.
|
180
|
+
rubygems_version: 2.4.5.1
|
180
181
|
signing_key:
|
181
182
|
specification_version: 4
|
182
183
|
summary: A collection of tools for multitenant Ruby/Rails apps
|