Project

General

Profile

1 6912 aaronmk
selfDir_AkFFYJ := $(dir $(lastword $(MAKEFILE_LIST)))
2
root := $(selfDir_AkFFYJ)..
3
include $(root)/lib/common.Makefile
4
5
6 6979 aaronmk
##### Vars/functions
7
8
# Make
9
SHELL := /bin/bash
10
11 785 aaronmk
##### General targets
12 387 aaronmk
13 8183 aaronmk
all = vegbien.sql vegbien.my.sql util.sql py_util.sql
14 387 aaronmk
15 418 aaronmk
all: _always $(all) ;
16 387 aaronmk
17
clean: _always
18
	$(RM) $(all)
19
20 6916 aaronmk
%/reinstall: _always %/uninstall %/install ;
21
22
##### Installation
23
24 8183 aaronmk
schemas := temp util py_util
25 6916 aaronmk
install: $(schemas:%=%/install) ;
26
27 8183 aaronmk
schemasReversed := py_util util temp
28 6916 aaronmk
uninstall: $(schemasReversed:%=%/uninstall) ;
29
30
psqlOpts := --set ON_ERROR_STOP=1 --quiet
31
psqlAsAdmin := $(asAdmin) psql $(psqlOpts)
32
    # -E preserves env vars so PGOPTIONS is passed to psql
33
psqlAsAdminVegbien := $(psqlAsAdmin) vegbien
34
psqlNoSearchPath := env no_search_path=1 ../bin/psql_script_vegbien
35
36 6935 aaronmk
# Must come before `%/install: vegbien.sql` to override it
37
%/install: %.sql _always
38
	-<$< $(psqlNoSearchPath)
39
# ignore errors if schema exists
40
41 6933 aaronmk
%/uninstall: _always
42
	@$(if $(filter public% r%,$*),$(call confirmRmPublicSchema,$*))
43
	echo $(call rmSchemaCmd,$*)|$(psqlNoSearchPath)
44
45 6916 aaronmk
#### public
46
47 6928 aaronmk
confirmRmPublicSchema = $(call confirm,WARNING: This will delete the $(1)\
48
schema of your VegBIEN DB!,$(2))
49 6916 aaronmk
50 6919 aaronmk
# Installs a version of the public schema
51 6935 aaronmk
%/install: vegbien.sql _always
52 6982 aaronmk
	echo $(call mkSchemaCmd,$*)\
53
"COMMENT ON SCHEMA $* IS 'Version: $* ($(date))';"|$(psqlNoSearchPath)
54
	<$< $(sed) 's/( )public([,; ])/\1$*\2/g'|$(psqlNoSearchPath)
55 6919 aaronmk
56 6922 aaronmk
# Replaces the current public schema with the given version
57 6932 aaronmk
%/publish: _always
58 6928 aaronmk
	@$(call confirmRmPublicSchema,public,To save it: make schemas/rotate)
59 6986 aaronmk
	echo $(call rmSchemaCmd,public)'ALTER SCHEMA "$*" RENAME TO public;'\
60
|$(psqlNoSearchPath) --file - --single-transaction
61 6945 aaronmk
	@echo $(emph)'In your shell, run:'$(endEmph)'unset version'
62 6922 aaronmk
63 6916 aaronmk
rename/%: _always
64
	echo 'ALTER SCHEMA public RENAME TO "$*";'|$(psqlNoSearchPath)
65
	$(MAKE) public/install
66
67 6936 aaronmk
rotate: _always rename/$(version) ;
68 6916 aaronmk
69 8183 aaronmk
#### py_util
70 6916 aaronmk
71 8183 aaronmk
py_util/install: py_util.sql _always
72 6955 aaronmk
	-<$< $(psqlAsAdminVegbien)
73 6916 aaronmk
# ignore errors if schema exists
74
75
#### Others
76
77
# Needed on Ubuntu 12.04 (also other Linuxes?) because %/reinstall is ignored.
78
temp/reinstall: _always temp/uninstall temp/install ;
79
80 785 aaronmk
##### MySQL schema for ERD
81 533 aaronmk
82 809 aaronmk
repl = ../bin/repl
83 541 aaronmk
84 809 aaronmk
%.my.sql: %.sql ../lib/PostgreSQL-MySQL.csv filter_ERD.csv
85
	$(repl) <$(wordlist 1,2,$+)|$(repl) $(word 3,$+) >$@
86 2979 aaronmk
87 6916 aaronmk
##### DDL generation
88 2979 aaronmk
89 6029 aaronmk
pg_dump = env schema= ../bin/pg_dump_vegbien $(1) >$@
90 2979 aaronmk
91
vegbien.sql:
92 7093 aaronmk
	unset version dump_opts; $(call pg_dump,public)
93 2979 aaronmk
94 8183 aaronmk
py_util.sql:
95
	env owners=1 $(call pg_dump,py_util)
96 2979 aaronmk
97
# Must come after %.my.sql so that gets matched first
98
%.sql:
99
	$(call pg_dump,$*)