Project

General

Profile

1
##### Configuration
2

    
3
src_server ?= jupiter
4

    
5

    
6
selfDir_NzrNZp := $(dir $(lastword $(MAKEFILE_LIST)))
7
root := $(selfDir_NzrNZp)..
8
include $(root)/lib/common.Makefile
9

    
10

    
11
##### Vars/functions
12

    
13
# Make
14
SHELL := /bin/bash
15

    
16
# Paths
17
bin := $(root)/bin
18

    
19
# DB
20
psqlVerbose := $(bin)/psql_script_vegbien --echo-all
21
psqlNoSearchPath := env no_search_path=1 $(bin)/psql_script_vegbien
22
pg_dump := $(bin)/pg_dump_vegbien
23
backup := "time" env data=1 $(pg_dump)
24
restore := "time" $(bin)/postgres_vegbien pg_restore --exit-on-error
25
restoreBien := $(restore) --dbname=vegbien
26
# pg_restore doesn't support PGDATABASE env var
27

    
28
##### Backups
29

    
30
backups := $(wildcard *.backup)
31

    
32
#### Checksums
33

    
34
md5s: _always $(backups:%=%.md5) ;
35

    
36
%.md5: %
37
	nice -n +5 md5sum $<|cut -d ' ' -f 1 >$@
38

    
39
%.md5/test: %.md5 % _always
40
	echo '$(shell cat $<)  $*'|nice -n +5 md5sum -$(if $(isMac),v)c /dev/stdin
41

    
42
#### SQL
43

    
44
# Must come before %.sql with no prerequisites to be matched first
45
%.sql: %
46
	$(restore) $< >$@
47

    
48
# Full DB
49
# Must come before %.backup to be matched first
50
vegbien.%.backup:
51
	$(backup) all >$@
52
	$(MAKE) $@.md5
53

    
54
backup* = $(backup) $* >$@
55

    
56
# Note: This can't be used for the current (unrotated) public schema because
57
# pg_dump doesn't back up the CREATE SCHEMA statement for it, assuming falsely
58
# that public already exists because it's in template1.
59
%.backup:
60
	$(backup*)
61
	$(MAKE) $@.md5
62

    
63
# When testing, turn off %.sql so make won't skip `%.sql: %` in favor of it
64
ifeq ($(filter %.backup/test,$(MAKECMDGOALS)),)
65
%.sql:
66
	env plain=1 $(backup*)
67
endif
68

    
69
%.backup/restore: %.backup _always
70
	$(restoreBien) $<
71

    
72
%.sql/restore: %.sql _always
73
	$(bin)/psql_script_vegbien <$<
74
# pg_restore only supports "non-plain-text formats"
75
# (http://www.postgresql.org/docs/9.1/static/app-pgrestore.html)
76

    
77
%.backup/test: %.backup.sql _always
78
	rm $<
79

    
80
#### Archived imports
81

    
82
confirmRm = $(call confirm,WARNING: This will delete the archived import $(1)!)
83

    
84
public* = $(*:vegbien.%=%)
85

    
86
%.backup/remove: %.backup _always
87
	@$(call confirmRm,$(public*))
88
	echo $(call rmSchemaCmd,$(public*))|$(psqlNoSearchPath)
89

    
90
%.backup/rm_indexes: %.backup _always
91
	$(pg_dump) $*|$(bin)/mk_rm_indexes|$(psqlVerbose)
92

    
93
##### Synchronization
94

    
95
remote := $(src_user)@$(src_server):/data/dev/aaronmk/bien/backups/
96

    
97
rsyncBackups := $(rsync) --include="/*.backup" --include="/*.sql"\
98
--include="/*.csv" --include="/*.md5" --exclude="**"
99

    
100
upload: _always
101
	$(rsyncBackups) $(local) $(remote)
102

    
103
%/download: _always
104
	$(rsync) $(remote)$* $(local)$*
105
	-$(if $(filter %.md5,$*),,$(MAKE) $*.md5/download)
106
# ignore errors if $*.md5 does not exist
(1-1/2)