Mercurial > gemma
comparison schema/update-db.sh @ 3978:7b7c324b318f
Added database schema versioning and db update script.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 17 Jul 2019 12:05:06 +0200 |
parents | |
children | 5396581cf203 |
comparison
equal
deleted
inserted
replaced
3977:3eab3fc113b7 | 3978:7b7c324b318f |
---|---|
1 #!/bin/bash -e | |
2 # This is Free Software under GNU Affero General Public License v >= 3.0 | |
3 # without warranty, see README.md and license for details. | |
4 # | |
5 # SPDX-License-Identifier: AGPL-3.0-or-later | |
6 # License-Filename: LICENSES/AGPL-3.0.txt | |
7 # | |
8 # Copyright (C) 2019 by via donau | |
9 # – Österreichische Wasserstraßen-Gesellschaft mbH | |
10 # Software engineering by Intevation GmbH | |
11 # | |
12 # Author(s): | |
13 # * Sascha Wilde <wilde@intevation.de> | |
14 | |
15 ME=`basename "$0"` | |
16 BASEDIR=`dirname "$0"` | |
17 | |
18 usage() | |
19 { | |
20 cat <<EOF | |
21 $ME [OPTION]... | |
22 | |
23 Options: | |
24 -d, --db=NAME create the database NAME. Default: "gemma" | |
25 -p, --port=PORT connect do the postgresql cluster at PORT. | |
26 Default is the postgresql standard port 5432 | |
27 --help display this help and exit | |
28 | |
29 EOF | |
30 } | |
31 | |
32 fatal() | |
33 { | |
34 echo >&2 "$1" | |
35 exit 23 | |
36 } | |
37 | |
38 genpw() | |
39 # $1 - length | |
40 { | |
41 PW='' | |
42 until [ "$(grep '[^[:alnum:]]' <<<$PW)" -a "$(grep '[[:digit:]]' <<<$PW)" ] | |
43 do | |
44 PW=$(dd count=1 if=/dev/urandom 2>/dev/null \ | |
45 | tr -cd '[:alnum:],._!?-' | tail -c "$1") | |
46 done | |
47 echo "$PW" | |
48 } | |
49 | |
50 # Defaults: | |
51 | |
52 db=gemma | |
53 port=5432 | |
54 | |
55 # Parse options: | |
56 | |
57 OPTS=`getopt \ | |
58 -l help,db:,port: \ | |
59 -o d:p: -n "$ME" -- "$@"` | |
60 [ $? -eq 0 ] || { usage ; exit 1 ; } | |
61 | |
62 eval set -- "$OPTS" | |
63 | |
64 while true ; do | |
65 case "$1" in | |
66 --db|-d) | |
67 db="$2" | |
68 shift 2 | |
69 ;; | |
70 --port|-p) | |
71 port="$2" | |
72 shift 2 | |
73 ;; | |
74 --help) | |
75 { usage ; exit 0 ; } | |
76 ;; | |
77 --) | |
78 shift | |
79 break | |
80 ;; | |
81 esac | |
82 done | |
83 | |
84 | |
85 get_version() | |
86 { | |
87 local ver | |
88 if ver=$( psql -qtA -p "$port" -d "$db" \ | |
89 -c 'SELECT get_schema_version()' 2>/dev/null ) | |
90 then | |
91 echo $ver | |
92 else | |
93 echo '-1' | |
94 fi | |
95 } | |
96 | |
97 # Main ------------------------------------------------------------ | |
98 | |
99 current_ver=$( get_version ) | |
100 | |
101 for d in $BASEDIR/updates/* ; do | |
102 new_ver=$( basename $d ) | |
103 if [ -d "$d" -a "$new_ver" -gt $current_ver ] ; then | |
104 echo "Running updates for $new_ver ..." | |
105 | |
106 sql=$( cat `echo "$d/"* | sort -n` ) | |
107 psql -q -p "$port" -d "$db" -c "$sql" | |
108 fi | |
109 done |