psql-cm 0.0.3 → 0.0.4
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 +4 -0
- data/lib/psql-cm/base.rb +25 -27
- data/lib/psql-cm/database.rb +32 -3
- data/lib/psql-cm/version.rb +1 -1
- metadata +2 -2
data/History.md
CHANGED
data/lib/psql-cm/base.rb
CHANGED
@@ -32,7 +32,7 @@ module PSQLCM
|
|
32
32
|
|
33
33
|
def schemas(name = 'postgres')
|
34
34
|
@schemas = db(name).
|
35
|
-
exec("SELECT nspname
|
35
|
+
exec("SELECT nspname AS name FROM pg_namespace WHERE nspname !~ '^pg_.*|information_schema';").
|
36
36
|
map{|row| row["name"]}
|
37
37
|
debug "schemas> #{@schemas}"
|
38
38
|
@schemas
|
@@ -77,7 +77,7 @@ module PSQLCM
|
|
77
77
|
FileUtils.touch(base_file)
|
78
78
|
FileUtils.touch(cm_file)
|
79
79
|
|
80
|
-
command = "pg_dump --schema-only --no-owner --schema=#{schema} "
|
80
|
+
command = "pg_dump #{db(database).psql_args} --schema-only --no-owner --schema=#{schema} "
|
81
81
|
if File.size(base_file) > 0
|
82
82
|
command += "--file=#{cm_file} --table=psql_cm "
|
83
83
|
else
|
@@ -95,10 +95,9 @@ module PSQLCM
|
|
95
95
|
debug "setup> Setting up pg_psql_cm table in each target schema."
|
96
96
|
tree.each_pair do |database, schema_hash|
|
97
97
|
schema_hash.keys.each do |schema|
|
98
|
-
|
99
|
-
db(database).exec <<-SQL
|
98
|
+
sql = <<-SQL
|
100
99
|
SET search_path = #{schema}, public;
|
101
|
-
CREATE TABLE IF NOT EXISTS pg_psql_cm
|
100
|
+
CREATE TABLE IF NOT EXISTS #{schema}.pg_psql_cm
|
102
101
|
(
|
103
102
|
id bigserial NOT NULL PRIMARY KEY ,
|
104
103
|
is_base boolean NOT NULL,
|
@@ -107,44 +106,45 @@ module PSQLCM
|
|
107
106
|
content text NOT NULL
|
108
107
|
);
|
109
108
|
SQL
|
109
|
+
debug "setup:#{database}:#{schema}> sql\n#{sql}"
|
110
|
+
db(database).exec sql
|
110
111
|
end
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
114
115
|
def restore!
|
115
|
-
# TODO: Restore psql-cm filesystem path files {base,cm}.sql into database
|
116
|
-
# structure.
|
117
116
|
unless config.sql_path
|
118
117
|
$stdout.puts "Warning: --sql-path was not set, defaulting to $PWD/sql."
|
119
118
|
config.sql_path = "#{ENV["PWD"]}/sql"
|
120
119
|
end
|
121
120
|
|
122
121
|
debug "restore> sql_path: #{config.sql_path}"
|
123
|
-
|
122
|
+
File.directory?(config.sql_path) or
|
123
|
+
halt! "Cannot restore from a path that does not exist: #{config.sql_path}"
|
124
|
+
|
124
125
|
Dir.chdir(config.sql_path) do
|
125
|
-
tree.each_pair do |database, schema_hash|
|
126
|
-
debug "restore> database: #{database}"
|
127
126
|
|
128
|
-
|
129
|
-
|
127
|
+
Dir['*'].each do |database|
|
128
|
+
next unless File.directory? database
|
130
129
|
|
131
|
-
|
132
|
-
|
133
|
-
File.directory?(File.join(config.sql_path,database,schema)) or
|
134
|
-
FileUtils.mkdir(File.join(config.sql_path,database,schema))
|
130
|
+
Dir.chdir(database) do
|
131
|
+
sh "restore", "createdb #{db(database).psql_args} #{database}"
|
135
132
|
|
136
|
-
|
137
|
-
|
133
|
+
debug "restore:#{database}>"
|
134
|
+
Dir['*'].each do |schema|
|
135
|
+
next unless File.directory? schema
|
138
136
|
|
139
|
-
|
140
|
-
|
137
|
+
base_file = File.join(config.sql_path,database,schema,'base.sql')
|
138
|
+
cm_file = File.join(config.sql_path,database,schema,'cm.sql')
|
141
139
|
|
142
|
-
|
143
|
-
|
140
|
+
debug "restore:#{database}:#{schema}> #{base_file}"
|
141
|
+
sh 'restore', "psql #{db(database).psql_args} #{database} < #{base_file}"
|
144
142
|
|
145
|
-
|
146
|
-
|
147
|
-
|
143
|
+
next if File.size(cm_file) == 0
|
144
|
+
|
145
|
+
debug "restore:#{database}:#{schema}> #{cm_file}"
|
146
|
+
sh 'restore', "psql #{db(database).psql_args} #{database} < #{cm_file}"
|
147
|
+
end
|
148
148
|
end
|
149
149
|
end
|
150
150
|
end
|
@@ -167,8 +167,6 @@ module PSQLCM
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
-
private
|
171
|
-
|
172
170
|
def sh(tag, command)
|
173
171
|
debug "sh:#{tag}> #{command}"
|
174
172
|
%x[#{command}]
|
data/lib/psql-cm/database.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module PSQLCM
|
2
|
+
|
2
3
|
class Connection < Delegator
|
4
|
+
|
3
5
|
def initialize(options = {})
|
4
|
-
@name = options[:dbname] || 'postgres'
|
5
6
|
@config = ::PSQLCM.config.connection.merge(options)
|
7
|
+
@config[:dbname] = options[:dbname] || 'postgres'
|
6
8
|
|
7
9
|
super # For delegator pattern:
|
8
10
|
@delegated_object = db
|
@@ -13,6 +15,10 @@ module PSQLCM
|
|
13
15
|
def __setobj__(object) ; end
|
14
16
|
|
15
17
|
def db
|
18
|
+
unless @config[:dbname] == 'postgres'
|
19
|
+
::PSQLCM.sh 'createdb', "createdb #{psql_args} #{@config[:dbname]}"
|
20
|
+
end
|
21
|
+
|
16
22
|
@db || connect!
|
17
23
|
end
|
18
24
|
|
@@ -20,7 +26,7 @@ module PSQLCM
|
|
20
26
|
@db = PG.connect(@config)
|
21
27
|
end
|
22
28
|
|
23
|
-
def reconnect!(name = @
|
29
|
+
def reconnect!(name = @config[:dbname])
|
24
30
|
close!
|
25
31
|
connect!
|
26
32
|
end
|
@@ -28,6 +34,28 @@ module PSQLCM
|
|
28
34
|
def close!
|
29
35
|
@db.close
|
30
36
|
end
|
37
|
+
|
38
|
+
def pgpass # Ensure a pgpass entry exists for this connection.
|
39
|
+
pgpass_line = [
|
40
|
+
@config[:host], @config[:port], @config[:dbname], @config[:user],
|
41
|
+
@config[:password]
|
42
|
+
].join(':')
|
43
|
+
|
44
|
+
content = File.open(File.join(ENV['HOME'], '.pgpass'), 'r') { |file| file.read }
|
45
|
+
unless content.lines.detect{ |line| line == pgpass_line }
|
46
|
+
File.open(File.join(ENV['HOME'], '.pgpass'), 'w') do |file|
|
47
|
+
file.write(content + pgpass_line + "\n")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
pgpass_line
|
52
|
+
end # def pgpass
|
53
|
+
|
54
|
+
def psql_args
|
55
|
+
pgpass
|
56
|
+
"-h #{@config[:host]} -p #{@config[:port]} -U #{@config[:user]}"
|
57
|
+
end # def psql_args
|
58
|
+
|
31
59
|
end # class Connection
|
32
60
|
|
33
61
|
class << self
|
@@ -35,6 +63,7 @@ module PSQLCM
|
|
35
63
|
@db ||= {}
|
36
64
|
return @db[name] if @db[name]
|
37
65
|
@config.connection || configure!
|
66
|
+
|
38
67
|
@db[name] = Connection.new(:dbname => name)
|
39
68
|
end
|
40
69
|
|
@@ -51,7 +80,7 @@ module PSQLCM
|
|
51
80
|
:host => uri.host,
|
52
81
|
:port => uri.port || 5432,
|
53
82
|
:dbname => "postgres", # uri.path.sub('/',''),
|
54
|
-
:user => uri.user,
|
83
|
+
:user => uri.user || ENV['USER'],
|
55
84
|
:password => uri.password,
|
56
85
|
:connect_timeout => timeout.empty? ? 20 : timeout.to_i,
|
57
86
|
:sslmode => sslmode.empty? ? "disable" : sslmode # (disable|allow|prefer|require)
|
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.0.
|
4
|
+
version: 0.0.4
|
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-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pg
|