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