postmodern 0.0.6 → 0.0.7
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 +4 -4
- data/README.md +6 -6
- data/bin/postmodern +21 -0
- data/lib/postmodern/version.rb +1 -1
- data/lib/postmodern/wal.rb +15 -0
- data/lib/postmodern/wal/archive.rb +8 -0
- data/lib/postmodern/wal/base.rb +38 -0
- data/lib/postmodern/wal/restore.rb +18 -0
- data/spec/bin/postmodern_spec.rb +85 -0
- metadata +10 -10
- data/bin/pg_wal_archive +0 -25
- data/bin/pg_wal_restore +0 -18
- data/spec/bin/pg_wal_archive_spec.rb +0 -44
- data/spec/bin/pg_wal_restore_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f405030c5dbf5f51a061e1ff2835e4a64910ce50
|
4
|
+
data.tar.gz: 915def7fe244751c7bba0a86601c225f89c7e706
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5850bf34a46775aa89ac3dcd5d95d1485e424c75bf05f710a29f4e4373da32dc250c8ff9c3428b4fae46e5f9c359c92d5825431fdd1517251a913a61770a46f5
|
7
|
+
data.tar.gz: ef083017586db98680ceb3fd7f55dfc9a3940c820c809958d915847efe2115916aefbffc486f828cbcdf65a69ee1b58374ac6de0732187a9e93a33cbb019f41e
|
data/README.md
CHANGED
@@ -24,13 +24,13 @@ wrappers for YOUR archiving mechanism.
|
|
24
24
|
In postgresql.conf
|
25
25
|
|
26
26
|
```
|
27
|
-
archive_command = '
|
27
|
+
archive_command = 'postmodern archive --path %p --filename %f'
|
28
28
|
```
|
29
29
|
|
30
30
|
In recovery.conf
|
31
31
|
|
32
32
|
```
|
33
|
-
restore_command = '
|
33
|
+
restore_command = 'postmodern restore --path %p --filename %f'
|
34
34
|
```
|
35
35
|
|
36
36
|
By default these scripts will do nothing. With the presence of local
|
@@ -39,15 +39,15 @@ exported to the environment and the local scripts called (with arguments
|
|
39
39
|
preserved):
|
40
40
|
|
41
41
|
```ruby
|
42
|
-
ENV['WAL_ARCHIVE_PATH'] =
|
43
|
-
ENV['WAL_ARCHIVE_FILE'] =
|
42
|
+
ENV['WAL_ARCHIVE_PATH'] = path
|
43
|
+
ENV['WAL_ARCHIVE_FILE'] = filename
|
44
44
|
```
|
45
45
|
|
46
46
|
Local scripts can be written in any language. They should be able access
|
47
47
|
the relevant arguments either as $1, $2 or using the variables listed above.
|
48
48
|
|
49
|
-
`
|
50
|
-
`
|
49
|
+
`archive` will attempt to call a `postmodern_archive.local` script.
|
50
|
+
`restore` will attempt to call a `postmodern_restore.local` script.
|
51
51
|
|
52
52
|
|
53
53
|
## Contributing
|
data/bin/postmodern
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
|
+
|
5
|
+
require 'postmodern/wal'
|
6
|
+
require 'optparse'
|
7
|
+
|
8
|
+
options = {}
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: postmodern (archive|restore) <options>"
|
11
|
+
|
12
|
+
opts.on('-f', '--filename FILE', 'File name to archive') do |o|
|
13
|
+
options[:file] = o
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on('-p', '--path PATH', 'Path name of file to archive') do |o|
|
17
|
+
options[:path] = o
|
18
|
+
end
|
19
|
+
end.parse!
|
20
|
+
|
21
|
+
Postmodern::WAL.run(ARGV.first, options[:file], options[:path])
|
data/lib/postmodern/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'postmodern/wal/archive'
|
2
|
+
require 'postmodern/wal/restore'
|
3
|
+
|
4
|
+
module Postmodern
|
5
|
+
module WAL
|
6
|
+
COMMANDS = {
|
7
|
+
'archive' => Postmodern::WAL::Archive,
|
8
|
+
'restore' => Postmodern::WAL::Restore
|
9
|
+
}
|
10
|
+
|
11
|
+
def self.run(command, filename, path)
|
12
|
+
COMMANDS[command].new(filename, path).run
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Postmodern
|
2
|
+
module WAL
|
3
|
+
class Base
|
4
|
+
attr_reader :filename, :path
|
5
|
+
|
6
|
+
def initialize(filename, path)
|
7
|
+
@filename = filename
|
8
|
+
@path = path
|
9
|
+
|
10
|
+
ENV['WAL_ARCHIVE_PATH'] = path
|
11
|
+
ENV['WAL_ARCHIVE_FILE'] = filename
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
if local_script_exists?
|
16
|
+
log
|
17
|
+
`#{local_script} #{path} #{filename}`
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def local_script_exists?
|
24
|
+
`which #{local_script} >/dev/null 2>/dev/null`
|
25
|
+
$?.exitstatus == 0
|
26
|
+
end
|
27
|
+
|
28
|
+
def local_script
|
29
|
+
'postmodern_archive.local'
|
30
|
+
end
|
31
|
+
|
32
|
+
def log
|
33
|
+
puts "Archiving file: #{filename}, path: #{path}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Postmodern
|
4
|
+
module WAL
|
5
|
+
class Restore < Base
|
6
|
+
private
|
7
|
+
|
8
|
+
def local_script
|
9
|
+
'postmodern_restore.local'
|
10
|
+
end
|
11
|
+
|
12
|
+
def log
|
13
|
+
puts "Restoring file: #{filename}, path: #{path}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'postmodern' do
|
4
|
+
describe 'archive' do
|
5
|
+
let(:command) { `bin/postmodern archive --path filepath --filename filename` }
|
6
|
+
|
7
|
+
before do
|
8
|
+
double_cmd('postmodern_archive.local')
|
9
|
+
double_cmd('which', exit: 0)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'exports second argument as WAL_ARCHIVE_FILE' do
|
13
|
+
expect(command).to include('Archiving file: filename')
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'exports first argument WAL_ARCHIVE_PATH' do
|
17
|
+
expect(command).to include('path: filepath')
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when local script is present' do
|
21
|
+
before { double_cmd('which postmodern_archive.local', exit: 0) }
|
22
|
+
|
23
|
+
it 'succeeds' do
|
24
|
+
expect { command }.to have_exit_status(0)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'calls a local file with file name and path' do
|
28
|
+
expect { command }.to shellout('postmodern_archive.local filepath filename')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when local script is not present' do
|
33
|
+
before { double_cmd('which postmodern_archive.local', exit: 1) }
|
34
|
+
|
35
|
+
it 'succeeds' do
|
36
|
+
expect { command }.to have_exit_status(0)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'does nothing' do
|
40
|
+
expect { command }.not_to shellout('pg_wal_archive.local filepath filename')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'restore' do
|
46
|
+
let(:command) { `bin/postmodern restore --path filepath --filename filename` }
|
47
|
+
|
48
|
+
before do
|
49
|
+
double_cmd('postmodern_restore.local')
|
50
|
+
double_cmd('which', exit: 0)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'exports second argument as WAL_restore_FILE' do
|
54
|
+
expect(command).to include('Restoring file: filename')
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'exports first argument WAL_restore_PATH' do
|
58
|
+
expect(command).to include('path: filepath')
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when local script is present' do
|
62
|
+
before { double_cmd('which postmodern_restore.local', exit: 0) }
|
63
|
+
|
64
|
+
it 'succeeds' do
|
65
|
+
expect { command }.to have_exit_status(0)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'calls a local file with file name and path' do
|
69
|
+
expect { command }.to shellout('postmodern_restore.local filepath filename')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when local script is not present' do
|
74
|
+
before { double_cmd('which postmodern_restore.local', exit: 1) }
|
75
|
+
|
76
|
+
it 'succeeds' do
|
77
|
+
expect { command }.to have_exit_status(0)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'does nothing' do
|
81
|
+
expect { command }.not_to shellout('pg_wal_restore.local filepath filename')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postmodern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Saxby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,8 +42,7 @@ description: Tools for managing PostgreSQL
|
|
42
42
|
email:
|
43
43
|
- sax@livinginthepast.org
|
44
44
|
executables:
|
45
|
-
-
|
46
|
-
- pg_wal_restore
|
45
|
+
- postmodern
|
47
46
|
extensions: []
|
48
47
|
extra_rdoc_files: []
|
49
48
|
files:
|
@@ -55,13 +54,15 @@ files:
|
|
55
54
|
- LICENSE.txt
|
56
55
|
- README.md
|
57
56
|
- Rakefile
|
58
|
-
- bin/
|
59
|
-
- bin/pg_wal_restore
|
57
|
+
- bin/postmodern
|
60
58
|
- lib/postmodern.rb
|
61
59
|
- lib/postmodern/version.rb
|
60
|
+
- lib/postmodern/wal.rb
|
61
|
+
- lib/postmodern/wal/archive.rb
|
62
|
+
- lib/postmodern/wal/base.rb
|
63
|
+
- lib/postmodern/wal/restore.rb
|
62
64
|
- postmodern.gemspec
|
63
|
-
- spec/bin/
|
64
|
-
- spec/bin/pg_wal_restore_spec.rb
|
65
|
+
- spec/bin/postmodern_spec.rb
|
65
66
|
- spec/spec_helper.rb
|
66
67
|
homepage: https://github.com/wanelo/postmodern
|
67
68
|
licenses:
|
@@ -88,7 +89,6 @@ signing_key:
|
|
88
89
|
specification_version: 4
|
89
90
|
summary: Tools for managing PostgreSQL
|
90
91
|
test_files:
|
91
|
-
- spec/bin/
|
92
|
-
- spec/bin/pg_wal_restore_spec.rb
|
92
|
+
- spec/bin/postmodern_spec.rb
|
93
93
|
- spec/spec_helper.rb
|
94
94
|
has_rdoc:
|
data/bin/pg_wal_archive
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# This script is a wrapper for a user-generated pg_wal_archive.local
|
4
|
-
# script. If that script does not exist, this executable does nothing
|
5
|
-
# and WAL files are not archived.
|
6
|
-
#
|
7
|
-
# This script (and the local script) should be executable as the
|
8
|
-
# postgres user.
|
9
|
-
|
10
|
-
archive_path = ARGV[0]
|
11
|
-
archive_file = ARGV[1]
|
12
|
-
|
13
|
-
ENV['WAL_ARCHIVE_PATH']=archive_path # maps to %p in postgres archiving
|
14
|
-
ENV['WAL_ARCHIVE_FILE']=archive_file # maps to %f in postgres archiving
|
15
|
-
|
16
|
-
puts "Archiving file: #{archive_file}, path: #{archive_path}"
|
17
|
-
|
18
|
-
def local_script_exists?
|
19
|
-
`which pg_wal_archive.local >/dev/null 2>/dev/null`
|
20
|
-
$?.exitstatus == 0
|
21
|
-
end
|
22
|
-
|
23
|
-
if local_script_exists?
|
24
|
-
`pg_wal_archive.local #{archive_path} #{archive_file}`
|
25
|
-
end
|
data/bin/pg_wal_restore
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
archive_path = ARGV[0]
|
4
|
-
archive_file = ARGV[1]
|
5
|
-
|
6
|
-
ENV['WAL_ARCHIVE_PATH']=archive_path # maps to %p in postgres archiving
|
7
|
-
ENV['WAL_ARCHIVE_FILE']=archive_file # maps to %f in postgres archiving
|
8
|
-
|
9
|
-
puts "Archiving file: #{archive_file}, path: #{archive_path}"
|
10
|
-
|
11
|
-
def local_script_exists?
|
12
|
-
`which pg_wal_restore.local >/dev/null 2>/dev/null`
|
13
|
-
$?.exitstatus == 0
|
14
|
-
end
|
15
|
-
|
16
|
-
if local_script_exists?
|
17
|
-
`pg_wal_restore.local #{archive_path} #{archive_file}`
|
18
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'pg_wal_archive' do
|
4
|
-
before do
|
5
|
-
double_cmd('pg_wal_archive.local')
|
6
|
-
double_cmd('which', exit: 1)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'exports second argument as WAL_ARCHIVE_FILE' do
|
10
|
-
expect(`bin/pg_wal_archive filepath filename`).to include('Archiving file: filename')
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'exports first argument WAL_ARCHIVE_PATH' do
|
14
|
-
expect(`bin/pg_wal_archive filepath filename`).to include('path: filepath')
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when local script is present' do
|
18
|
-
before { double_cmd('which pg_wal_archive.local', exit: 0) }
|
19
|
-
|
20
|
-
it 'succeeds' do
|
21
|
-
expect { `bin/pg_wal_archive 1 2` }.to have_exit_status(0)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'calls a local file with file name and path' do
|
25
|
-
expect {
|
26
|
-
`bin/pg_wal_archive 11111 222222`
|
27
|
-
}.to shellout('pg_wal_archive.local 11111 222222')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'when local script is not present' do
|
32
|
-
before { double_cmd('which pg_wal_archive.local', exit: 1) }
|
33
|
-
|
34
|
-
it 'succeeds' do
|
35
|
-
expect { `bin/pg_wal_archive 1 2` }.to have_exit_status(0)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'does nothing' do
|
39
|
-
expect {
|
40
|
-
`bin/pg_wal_archive 11111 222222`
|
41
|
-
}.not_to shellout('pg_wal_archive.local 11111 222222')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'pg_wal_restore' do
|
4
|
-
before do
|
5
|
-
double_cmd('pg_wal_restore.local')
|
6
|
-
double_cmd('which')
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'exports second argument as WAL_ARCHIVE_FILE' do
|
10
|
-
expect(`bin/pg_wal_restore filepath filename`).to include('Archiving file: filename')
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'exports first argument as WAL_ARCHIVE_PATH' do
|
14
|
-
expect(`bin/pg_wal_restore filepath filename`).to include('path: filepath')
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when local script exists' do
|
18
|
-
before { double_cmd('which pg_wal_restore.local', exit: 0) }
|
19
|
-
|
20
|
-
it 'succeeds' do
|
21
|
-
expect {`bin/pg_wal_restore 1 2`}.to have_exit_status(0)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'calls a local file with file name and path' do
|
25
|
-
expect {
|
26
|
-
`bin/pg_wal_restore 11111 222222`
|
27
|
-
}.to shellout('pg_wal_restore.local 11111 222222')
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'when local script does not exists' do
|
32
|
-
before { double_cmd('which pg_wal_restore.local', exit: 1) }
|
33
|
-
|
34
|
-
it 'succeeds' do
|
35
|
-
expect {`bin/pg_wal_restore 1 2`}.to have_exit_status(0)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'does nothing' do
|
39
|
-
expect {
|
40
|
-
`bin/pg_wal_restore 11111 222222`
|
41
|
-
}.not_to shellout('pg_wal_restore.local')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|