pg_dumper 0.0.2
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +18 -0
- data/Rakefile +2 -0
- data/lib/pg_dumper/railtie.rb +12 -0
- data/lib/pg_dumper/version.rb +3 -0
- data/lib/pg_dumper.rb +76 -0
- data/lib/tasks/db_dump.rake +63 -0
- data/pg_dumper.gemspec +21 -0
- metadata +73 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# PgDumper
|
2
|
+
|
3
|
+
Abstraction layer between PostgreSQL utility pg_dump and Rails app.
|
4
|
+
|
5
|
+
## Rake tasks
|
6
|
+
You can specify few ENV variables:
|
7
|
+
GZIP - to gzip sql dump with gzip utility
|
8
|
+
FILE - dump output (else asks interactively)
|
9
|
+
VERBOSE - verbose output
|
10
|
+
Z - pg_dump compression level
|
11
|
+
|
12
|
+
### db:dump
|
13
|
+
Dumps database schema **with data**.
|
14
|
+
|
15
|
+
### db:dump:schema
|
16
|
+
Dumps database schema **without data**.
|
17
|
+
|
18
|
+
|
data/Rakefile
ADDED
data/lib/pg_dumper.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
class PgDumper
|
2
|
+
require 'pg_dumper/railtie' if defined?(Rails)
|
3
|
+
|
4
|
+
attr_reader :database
|
5
|
+
attr_reader :args
|
6
|
+
|
7
|
+
def initialize database
|
8
|
+
@database = database
|
9
|
+
@args = []
|
10
|
+
@options = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def run(mode = :silent)
|
14
|
+
@binary ||= find_executable
|
15
|
+
|
16
|
+
raise "ERROR: pg_dump executable not found" unless @binary.present?
|
17
|
+
|
18
|
+
options = {}
|
19
|
+
|
20
|
+
case mode
|
21
|
+
when :silent
|
22
|
+
options[:out] = "/dev/null"
|
23
|
+
end
|
24
|
+
system @binary, *args, database, options
|
25
|
+
end
|
26
|
+
|
27
|
+
def schema_only!
|
28
|
+
add_args "-s"
|
29
|
+
end
|
30
|
+
|
31
|
+
def recreate!
|
32
|
+
add_args "-c"
|
33
|
+
end
|
34
|
+
|
35
|
+
def data_only!
|
36
|
+
add_args "-a", '--disable-triggers'
|
37
|
+
add_args '-T', 'schema_migrations'
|
38
|
+
end
|
39
|
+
|
40
|
+
def compress! level=9
|
41
|
+
add_args '-Z', level if level.present?
|
42
|
+
end
|
43
|
+
|
44
|
+
def verbose!
|
45
|
+
add_args "-v"
|
46
|
+
end
|
47
|
+
|
48
|
+
def pretty!
|
49
|
+
add_args '--column-inserts'
|
50
|
+
end
|
51
|
+
|
52
|
+
def connection= opts
|
53
|
+
add_args '-p', opts['port'] if opts['port'].present?
|
54
|
+
add_args '-h', opts['host'] if opts['host'].present?
|
55
|
+
add_args '-U', opts['username'] if opts['host'].present?
|
56
|
+
end
|
57
|
+
|
58
|
+
def output= filename
|
59
|
+
add_args "-f", filename
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
def find_executable
|
64
|
+
[ENV['PG_DUMP'], %x{which pg_dump}.strip].each do |pg|
|
65
|
+
return pg if pg.present? && File.exists?(pg)
|
66
|
+
end
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_args(*args)
|
71
|
+
@args.push *args.map!(&:to_s)
|
72
|
+
@args.uniq!
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
namespace :db do
|
2
|
+
desc 'Dumps database (both data and schema) to FILE or asks for output'
|
3
|
+
task :dump => ["#{Rails.root}/config/database.yml", :environment] do
|
4
|
+
gzip = ENV['GZIP'].present?
|
5
|
+
db = ActiveRecord::Base.configurations[Rails.env]
|
6
|
+
backup_file = Time.now.strftime("backup_%Y%m%d%H%M%S.sql")
|
7
|
+
unless file = ENV['FILE']
|
8
|
+
print "Enter filename of dump [#{backup_file}#{'.gz' if gzip}]: "
|
9
|
+
input = STDIN.gets.chop
|
10
|
+
file = (input.blank?)? backup_file : input
|
11
|
+
end
|
12
|
+
|
13
|
+
dump = PgDumper.new db["database"]
|
14
|
+
dump.recreate!
|
15
|
+
dump.connection = db
|
16
|
+
dump.output = backup_file
|
17
|
+
dump.verbose! if ENV['VERBOSE'].present?
|
18
|
+
dump.compress! ENV['Z']
|
19
|
+
|
20
|
+
print "Creating backup to '#{file}'\n"
|
21
|
+
|
22
|
+
if dump.run
|
23
|
+
system 'gzip', '-v', file if gzip
|
24
|
+
print "Backup saved to #{file.inspect}\n"
|
25
|
+
else
|
26
|
+
print "Backup failed! Error status: #{$?}."
|
27
|
+
end
|
28
|
+
|
29
|
+
@backup_file = file
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'Dumps database (only data) to FILE or asks for output'
|
33
|
+
namespace :dump do
|
34
|
+
task :data => ["#{Rails.root}/config/database.yml", :environment] do
|
35
|
+
gzip = ENV['GZIP'].present?
|
36
|
+
db = ActiveRecord::Base.configurations[Rails.env]
|
37
|
+
backup_file = Time.now.strftime("backup_%Y%m%d%H%M%S.sql")
|
38
|
+
unless file = ENV['FILE']
|
39
|
+
print "Enter filename of dump [#{backup_file}#{'.gz' if gzip}]: "
|
40
|
+
input = STDIN.gets.chop
|
41
|
+
file = (input.blank?)? backup_file : input
|
42
|
+
end
|
43
|
+
|
44
|
+
dump = PgDumper.new db["database"]
|
45
|
+
dump.data_only!
|
46
|
+
dump.connection = db
|
47
|
+
dump.output = backup_file
|
48
|
+
dump.verbose! if ENV['VERBOSE'].present?
|
49
|
+
dump.compress! ENV['Z']
|
50
|
+
|
51
|
+
print "Creating backup to '#{file}'\n"
|
52
|
+
|
53
|
+
if dump.run
|
54
|
+
system 'gzip', '-v', file if gzip
|
55
|
+
print "Backup saved to #{file.inspect}\n"
|
56
|
+
else
|
57
|
+
print "Backup failed! Error status: #{$?}."
|
58
|
+
end
|
59
|
+
|
60
|
+
@backup_file = file
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/pg_dumper.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "pg_dumper/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "pg_dumper"
|
7
|
+
s.version = PgDumper::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["mikz"]
|
10
|
+
s.email = ["mikz@o2h.cz"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Adds Rake tasks to easily dump postgresql database with or without data}
|
13
|
+
s.description = %q{Provides abstraction layer between pg_dump utility and ruby. Also adds rake task to easily dump database with or without data.}
|
14
|
+
|
15
|
+
#s.rubyforge_project = "pg_dumper"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pg_dumper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- mikz
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-02-01 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Provides abstraction layer between pg_dump utility and ruby. Also adds rake task to easily dump database with or without data.
|
22
|
+
email:
|
23
|
+
- mikz@o2h.cz
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- README.md
|
34
|
+
- Rakefile
|
35
|
+
- lib/pg_dumper.rb
|
36
|
+
- lib/pg_dumper/railtie.rb
|
37
|
+
- lib/pg_dumper/version.rb
|
38
|
+
- lib/tasks/db_dump.rake
|
39
|
+
- pg_dumper.gemspec
|
40
|
+
has_rdoc: true
|
41
|
+
homepage: ""
|
42
|
+
licenses: []
|
43
|
+
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
requirements: []
|
66
|
+
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 1.3.7
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Adds Rake tasks to easily dump postgresql database with or without data
|
72
|
+
test_files: []
|
73
|
+
|