psql-cm 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.
- data/History.md +8 -0
- data/lib/psql-cm/base.rb +6 -6
- data/lib/psql-cm/database.rb +9 -2
- data/lib/psql-cm/dump.rb +3 -2
- data/lib/psql-cm/restore.rb +42 -32
- data/lib/psql-cm/setup.rb +4 -1
- data/lib/psql-cm/version.rb +1 -1
- metadata +2 -2
data/History.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# 0.1.1 - 2012-04-27
|
2
|
+
|
3
|
+
Documentation and debugging enhancements.
|
4
|
+
|
5
|
+
Setup now properly uses --no-privileges
|
6
|
+
|
7
|
+
Restore now ensures it uses the correct schema and loops over the change rows.
|
8
|
+
|
1
9
|
# 0.1.0 - 2012-04-24
|
2
10
|
|
3
11
|
Ensure pgpass file is created if it does not exist.
|
data/lib/psql-cm/base.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
module PSQLCM
|
2
2
|
class << self
|
3
|
-
def verbose(message)
|
4
|
-
$stdout.puts message if (config.verbose || config.debug)
|
3
|
+
def verbose(*message)
|
4
|
+
$stdout.puts message.join(' ') if (config.verbose || config.debug)
|
5
5
|
end
|
6
6
|
|
7
|
-
def debug(message)
|
8
|
-
$stdout.puts message if config.debug
|
7
|
+
def debug(*message)
|
8
|
+
$stdout.puts message.join(' ') if config.debug
|
9
9
|
end
|
10
10
|
|
11
|
-
def halt!(message)
|
12
|
-
$stderr.puts message
|
11
|
+
def halt!(*message)
|
12
|
+
$stderr.puts message.join(' ')
|
13
13
|
exit 1
|
14
14
|
end
|
15
15
|
|
data/lib/psql-cm/database.rb
CHANGED
@@ -4,7 +4,7 @@ module PSQLCM
|
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
6
|
@config = ::PSQLCM.config.connection.merge(options)
|
7
|
-
@config[:dbname] = options[:dbname]
|
7
|
+
@config[:dbname] = options[:dbname] if options[:dbname]
|
8
8
|
|
9
9
|
super # For delegator pattern:
|
10
10
|
@delegated_object = db
|
@@ -84,10 +84,17 @@ module PSQLCM
|
|
84
84
|
timeout = query.detect { |k| k.match /connect_timeout=/ }.to_s.sub(/.*=/,'')
|
85
85
|
sslmode = query.detect { |k| k.match /sslmode=/ }.to_s.sub(/.*=/,'')
|
86
86
|
|
87
|
+
database = uri.path.split('/').first.to_s
|
88
|
+
database = 'postgres' if database.empty?
|
89
|
+
|
90
|
+
unless @config.databases.detect { |name| name == database }
|
91
|
+
@config.databases << database
|
92
|
+
end
|
93
|
+
|
87
94
|
@config.connection = {
|
88
95
|
:host => uri.host,
|
89
96
|
:port => uri.port || 5432,
|
90
|
-
:dbname =>
|
97
|
+
:dbname => database,
|
91
98
|
:user => uri.user || ENV['USER'],
|
92
99
|
:password => uri.password,
|
93
100
|
:connect_timeout => timeout.empty? ? 20 : timeout.to_i,
|
data/lib/psql-cm/dump.rb
CHANGED
@@ -15,8 +15,9 @@ module PSQLCM
|
|
15
15
|
cm_file = File.join(sql_path,database,"#{schema}.sql")
|
16
16
|
|
17
17
|
sh %W[ pg_dump #{db(database).psql_args} --no-privileges --no-owner
|
18
|
-
--schema=#{schema} --file=#{cm_file}
|
19
|
-
#{database}
|
18
|
+
--schema=#{schema} --file=#{cm_file}
|
19
|
+
--table=#{schema}.#{config.cm_table} #{database}
|
20
|
+
].join(' ')
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
data/lib/psql-cm/restore.rb
CHANGED
@@ -19,42 +19,52 @@ module PSQLCM
|
|
19
19
|
schema = cm_file.sub(".sql",'')
|
20
20
|
ensure_schema_exists(database,schema)
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
WHERE is_base IS true ORDER BY created_at
|
29
|
-
DESC LIMIT 1;")
|
30
|
-
temp_file.write(row)
|
31
|
-
sh "psql #{db(database).psql_args} #{database} < #{temp_file.path}"
|
22
|
+
psqlrc_file = File.join(ENV['HOME'],'.psqlrc')
|
23
|
+
FileUtils.touch(psqlrc_file) unless File.exists?(psqlrc_file)
|
24
|
+
psqlrc = File.read(psqlrc_file)
|
25
|
+
File.open(psqlrc_file,'w') do |file|
|
26
|
+
file.rewind
|
27
|
+
file.write "SET search_path TO #{schema}; "
|
32
28
|
end
|
33
29
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
temp_file.close
|
30
|
+
begin
|
31
|
+
tag = "restore:#{database}:#{schema}>"
|
32
|
+
debug tag, cm_file
|
33
|
+
sh "psql #{db(database).psql_args} #{database} < #{cm_file}"
|
34
|
+
|
35
|
+
ensure_cm_table_exists(database,schema)
|
41
36
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
sql = "SELECT content from #{schema}.#{config.cm_table}
|
38
|
+
WHERE is_base IS true ORDER BY created_at ASC;"
|
39
|
+
debug tag, "base:sql> #{sql}"
|
40
|
+
db(database).exec(sql).each do |base_row|
|
41
|
+
debug "BASE content:", base_row['content']
|
42
|
+
Tempfile.open('base.sql') do |file|
|
43
|
+
file.write(base_row['content'])
|
44
|
+
sh "psql #{db(database).psql_args} #{database} < #{file.path}"
|
48
45
|
end
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
46
|
+
end
|
47
|
+
|
48
|
+
sql = "SELECT content from #{schema}.#{config.cm_table}
|
49
|
+
WHERE is_base IS false
|
50
|
+
ORDER BY created_at ASC;"
|
51
|
+
|
52
|
+
debug tag, "changes:sql> #{sql}"
|
53
|
+
changes = db(database).exec(sql)
|
54
|
+
debug tag, "change:count>#{changes.cmd_tuples}"
|
55
|
+
changes.each do |row|
|
56
|
+
debug tag, "content>\n#{row['content']}"
|
57
|
+
Tempfile.open('change.sql') do |file|
|
58
|
+
file.write(row['content'])
|
59
|
+
file.close
|
60
|
+
sh "psql #{db(database).psql_args} #{database} < #{file.path}"
|
56
61
|
end
|
57
62
|
end
|
63
|
+
ensure
|
64
|
+
File.open(psqlrc_file,'w') do |file|
|
65
|
+
file.rewind
|
66
|
+
file.write psqlrc
|
67
|
+
end
|
58
68
|
end
|
59
69
|
end
|
60
70
|
end
|
@@ -62,5 +72,5 @@ module PSQLCM
|
|
62
72
|
end
|
63
73
|
end # def restore!
|
64
74
|
|
65
|
-
end
|
66
|
-
end
|
75
|
+
end # class << self
|
76
|
+
end # module PSQLCM
|
data/lib/psql-cm/setup.rb
CHANGED
@@ -8,7 +8,10 @@ module PSQLCM
|
|
8
8
|
ensure_cm_table_exists(database,schema)
|
9
9
|
|
10
10
|
Tempfile.open('base.sql') do |temp_file|
|
11
|
-
sh
|
11
|
+
sh %W[ pg_dump #{db(database).psql_args}
|
12
|
+
--schema-only --no-owner --no-privileges
|
13
|
+
--schema=#{schema} --file=#{temp_file.path} #{database}
|
14
|
+
].join(' ')
|
12
15
|
|
13
16
|
content = %x{cat #{temp_file.path}}
|
14
17
|
name = %x{git config user.name}.strip
|
data/lib/psql-cm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psql-cm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pg
|