psql-cm 0.0.2 → 0.0.3

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 CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.0.3 - 2012-04-18
2
+
3
+ 'setup' action functional.
4
+
1
5
  # 0.0.2 - 2012-04-18
2
6
 
3
7
  Initial 'dump' feature.
data/README.md CHANGED
@@ -3,30 +3,44 @@
3
3
  This project is a tool for schema change management within a PostgreSQL database
4
4
  cluster.
5
5
 
6
+ # Prerequisites
7
+
8
+ - [Ruby >= 1.9.3](http://www.ruby-lang.org/en/)
9
+ - [Postgresql >= 9.1+](http://www.postgresql.org/)
10
+ - [Git SCM](http://git-scm.com/)
11
+
12
+ # Installation of psql-cm
13
+
14
+ Once the prerequisites have been satisfied on your system, using the
15
+ 'gem' command from Ruby 1.9.3 do:
16
+
17
+ user$ gem install psql-scm
18
+
6
19
  # Setup
7
20
 
8
- Setup the psql\_cm control tables on the target databases,
21
+ Setup the psql\_cm control tables on the target databases, use a comma (',')
22
+ to separate multiple database names.
9
23
 
10
- $ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" setup
24
+ user$ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" setup
11
25
 
12
26
  # Dump
13
27
 
14
28
  Dump the current database schema to the specified --sql-path directory, if none
15
29
  specified it dumps to $PWD/sql
16
30
 
17
- $ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" dump
31
+ user$ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" dump
18
32
 
19
- # Restore
33
+ # Restore (Currently being implemented)
20
34
 
21
35
  Restore a previously psql-cm dumped database schema into a brand new postgresql
22
36
  database cluster.
23
37
 
24
- $ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" restore
38
+ user$ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" restore
25
39
 
26
40
  # Example
27
41
 
28
- $ createdb psqlcm_test
29
- $ psql psqlcm_test -c 'CREATE SCHEMA schema_one; CREATE SCHEMA schema_two'
30
- $ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" setup
31
- $ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" dump
42
+ user$ createdb psqlcm_test
43
+ user$ psql psqlcm_test -c 'CREATE SCHEMA schema_one; CREATE SCHEMA schema_two'
44
+ user$ echo psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" setup
45
+ user$ psql-cm --databases psqlcm_test --uri "postgres://127.0.0.1:5432" dump
32
46
 
data/lib/psql-cm/base.rb CHANGED
@@ -84,9 +84,7 @@ module PSQLCM
84
84
  command += "--file=#{base_file} --exclude-table=psql_cm "
85
85
  end
86
86
  command += "#{database}"
87
- debug "dump> #{command}"
88
-
89
- %x[#{command}]
87
+ sh 'dump', command
90
88
  end
91
89
  end
92
90
  end
@@ -94,11 +92,62 @@ module PSQLCM
94
92
 
95
93
  def setup!
96
94
  # Create psql_cm tables for each schema on the target db.
95
+ debug "setup> Setting up pg_psql_cm table in each target schema."
96
+ tree.each_pair do |database, schema_hash|
97
+ schema_hash.keys.each do |schema|
98
+ debug "setup:#{database}> #{schema}"
99
+ db(database).exec <<-SQL
100
+ SET search_path = #{schema}, public;
101
+ CREATE TABLE IF NOT EXISTS pg_psql_cm
102
+ (
103
+ id bigserial NOT NULL PRIMARY KEY ,
104
+ is_base boolean NOT NULL,
105
+ created_at timestamp with time zone DEFAULT now(),
106
+ implementer text NOT NULL,
107
+ content text NOT NULL
108
+ );
109
+ SQL
110
+ end
111
+ end
97
112
  end
98
113
 
99
- def load!
100
- # TODO: Load psql-cm filesystem path files {base,cm}.sql into database
114
+ def restore!
115
+ # TODO: Restore psql-cm filesystem path files {base,cm}.sql into database
101
116
  # structure.
117
+ unless config.sql_path
118
+ $stdout.puts "Warning: --sql-path was not set, defaulting to $PWD/sql."
119
+ config.sql_path = "#{ENV["PWD"]}/sql"
120
+ end
121
+
122
+ debug "restore> sql_path: #{config.sql_path}"
123
+ FileUtils.mkdir(config.sql_path) unless File.directory?(config.sql_path)
124
+ Dir.chdir(config.sql_path) do
125
+ tree.each_pair do |database, schema_hash|
126
+ debug "restore> database: #{database}"
127
+
128
+ File.directory?(File.join(config.sql_path,database)) or
129
+ FileUtils.mkdir(File.join(config.sql_path,database))
130
+
131
+ schema_hash.each_pair do |schema, files|
132
+ debug "restore> schema: #{schema}"
133
+ File.directory?(File.join(config.sql_path,database,schema)) or
134
+ FileUtils.mkdir(File.join(config.sql_path,database,schema))
135
+
136
+ base_file = File.join(config.sql_path,database,schema,'base.sql')
137
+ cm_file = File.join(config.sql_path,database,schema,'cm.sql')
138
+
139
+ FileUtils.touch(base_file)
140
+ FileUtils.touch(cm_file)
141
+
142
+ command = "psql #{database} < #{base_file}"
143
+ sh 'restore', command
144
+
145
+ next if File.size(cm_file) == 0
146
+ command = "psql #{database} < #{cm_file}"
147
+ sh 'restore', command
148
+ end
149
+ end
150
+ end
102
151
  end
103
152
 
104
153
  def run!(action = config.action, parent_id = config.parent_id)
@@ -118,6 +167,13 @@ module PSQLCM
118
167
  end
119
168
  end
120
169
 
170
+ private
171
+
172
+ def sh(tag, command)
173
+ debug "sh:#{tag}> #{command}"
174
+ %x[#{command}]
175
+ end
176
+
121
177
  end # class << self
122
178
  end
123
179
 
@@ -1,4 +1,4 @@
1
1
  module PSQLCM
2
- Version = '0.0.2'
2
+ Version = '0.0.3'
3
3
  end
4
4
 
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.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ! '>='
65
65
  - !ruby/object:Gem::Version
66
- version: 1.8.22
66
+ version: 1.3.6
67
67
  requirements: []
68
68
  rubyforge_project:
69
69
  rubygems_version: 1.8.22