cf3309c65926268438e65a2b1934a0f7f89ff71a
[sip-router] / utils / kamctl / kamdbctl.pgsql
1 #
2 # Script for adding and dropping Kamailio Postgres tables
3 #
4 # History:
5 # 2006-05-16  added ability to specify MD5 from a configuration file
6 #             FreeBSD does not have the md5sum function (norm)
7 # 2006-07-14  Corrected syntax from MySQL to Postgres (norm)
8 #             moved INDEX creation out of CREATE table statement into 
9 #                  CREATE INDEX (usr_preferences, trusted)
10 #             auto_increment isn't valid in Postgres, replaced with 
11 #                  local AUTO_INCREMENT
12 #             datetime isn't valid in Postgres, replaced with local DATETIME 
13 #             split GRANTs for SERWeb tables so that it is only executed 
14 #                  if SERWeb tables are created
15 #             added GRANTs for re_grp table
16 #             added CREATE pdt table (from PDT module)
17 #             corrected comments to indicate Postgres as opposed to MySQL
18 #             made last_modified/created stamps consistent to now() using 
19 #                  local TIMESTAMP
20 # 2006-10-19  Added address table (bogdan)
21 # 2006-10-27  subscriber table cleanup; some columns are created only if
22 #             serweb is installed (bogdan)
23 # 2007-01-26  added seperate installation routine for presence related tables
24 #             and fix permissions for the SERIAL sequences.
25 # 2007-05-21  Move SQL database definitions out of this script (henning)
26 # 2007-05-31  Move common definitions to kamdbctl.base file (henningw)
27 #
28 # 2007-06-11  Use a common control tool for database tasks, like the kamctl
29
30 # path to the database schemas
31 DATA_DIR="/usr/local/share/kamailio"
32 if [ -d "$DATA_DIR/postgres" ] ; then
33         DB_SCHEMA="$DATA_DIR/postgres"
34 else
35         DB_SCHEMA="./postgres"
36 fi
37
38 #################################################################
39 # config vars
40 #################################################################
41
42 # full privileges Postgres user
43 if [ -z "$DBROOTUSER" ]; then
44         DBROOTUSER="postgres"
45         if [ ! -r ~/.pgpass ]; then
46                 merr "~/.pgpass does not exist"
47                 merr "create this file and add proper credentials for user postgres"
48                 merr "Note: you need at least postgresql>= 7.3"
49                 merr "Hint: .pgpass hostname must match DBHOST"
50                 exit 1
51         fi
52 fi
53
54 CMD="psql -q -h $DBHOST -U $DBROOTUSER "
55 DUMP_CMD="pg_dump -h $DBHOST -U $DBROOTUSER -c"
56 #################################################################
57
58
59 # execute sql command with optional db name
60 sql_query()
61 {
62         if [ $# -gt 1 ] ; then
63                 if [ -n "$1" ]; then
64                         DB="$1"
65                 else
66                         DB=""
67                 fi
68                 shift
69                 $CMD -d $DB -c "$@"
70         else
71                 $CMD "$@"
72         fi
73 }
74
75
76 kamailio_drop()  # pars: <database name>
77 {
78 if [ $# -ne 1 ] ; then
79         merr "kamailio_drop function takes two params"
80         exit 1
81 fi
82
83 sql_query "template1" "drop database \"$1\";"
84 if [ $? -ne 0 ] ; then
85         merr "Dropping database $1 failed!"
86         exit 1
87 fi
88
89 # postgresql users are not dropped automatically
90 sql_query "template1" "drop user \"$DBRWUSER\"; drop user \"$DBROUSER\";"
91
92 if [ $? -ne 0 ] ; then
93         mwarn "Could not drop $DBRWUSER or $DBROUSER users, try to continue.."
94 else 
95         minfo "Database user deleted"
96 fi
97
98 minfo "Database $1 dropped"
99 } #kamailio_drop
100
101
102 kamailio_create () # pars: <database name>
103 {
104 if [ $# -ne 1 ] ; then
105         merr "kamailio_create function takes one param"
106         exit 1
107 fi
108
109 minfo "creating database $1 ..."
110
111 sql_query "template1" "create database \"$1\";"
112 if [ $? -ne 0 ] ; then
113         merr "Creating database failed!"
114         exit 1
115 fi
116
117 sql_query "$1" "CREATE FUNCTION "concat" (text,text) RETURNS text AS 'SELECT \$1 || \$2;' LANGUAGE 'sql';
118                 CREATE FUNCTION "rand" () RETURNS double precision AS 'SELECT random();' LANGUAGE 'sql';"
119 # emulate mysql proprietary functions used by the lcr module in postgresql
120
121 if [ $? -ne 0 ] ; then
122         merr "Creating mysql emulation functions failed!"
123         exit 1
124 fi
125
126 for TABLE in $STANDARD_MODULES; do
127     mdbg "Creating core table: $TABLE"
128     sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
129     if [ $? -ne 0 ] ; then
130         merr "Creating core tables failed!"
131         exit 1
132     fi
133 done
134
135 sql_query "$1" "CREATE USER $DBRWUSER WITH PASSWORD '$DBRWPW';
136                 CREATE USER $DBROUSER WITH PASSWORD '$DBROPW';"
137 if [ $? -ne 0 ] ; then
138         mwarn "Create user in database failed, perhaps they allready exist? Try to continue.."
139 fi
140
141 for TABLE in $STANDARD_TABLES; do
142         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
143         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
144         if [ $TABLE != "version" ] ; then
145                 sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
146         sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
147         fi
148
149         if [ $? -ne 0 ] ; then
150                 merr "Grant privileges to standard tables failed!"
151                 exit 1
152         fi
153 done
154
155 if [ -e $DB_SCHEMA/extensions-create.sql ]
156 then
157         minfo "Creating custom extensions tables"
158         sql_query $1 < $DB_SCHEMA/extensions-create.sql
159         if [ $? -ne 0 ] ; then
160         merr "Creating custom extensions tables failed!"
161         exit 1
162         fi
163 fi
164
165 minfo "Core Kamailio tables succesfully created."
166
167 get_answer $INSTALL_PRESENCE_TABLES "Install presence related tables? (y/n): "
168 if [ "$ANSWER" = "y" ]; then
169         presence_create $1
170 fi
171
172 get_answer $INSTALL_EXTRA_TABLES "Install tables for $EXTRA_MODULES? (y/n): "
173 if [ "$ANSWER" = "y" ]; then
174         extra_create $1
175 fi
176 } # kamailio_create
177
178
179 presence_create () # pars: <database name>
180 {
181 if [ $# -ne 1 ] ; then
182         merr "presence_create function takes one param"
183         exit 1
184 fi
185
186 minfo "creating presence tables into $1 ..."
187
188 sql_query "$1" < $DB_SCHEMA/presence-create.sql
189
190 if [ $? -ne 0 ] ; then
191         merr "Failed to create presence tables!"
192         exit 1
193 fi
194
195 sql_query "$1" < $DB_SCHEMA/rls-create.sql
196
197 if [ $? -ne 0 ] ; then
198         merr "Failed to create rls-presence tables!"
199         exit 1
200 fi
201
202 for TABLE in $PRESENCE_TABLES; do
203         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
204         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
205         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
206     sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
207         if [ $? -ne 0 ] ; then
208                 merr "Grant privileges to presence tables failed!"
209                 exit 1
210         fi
211 done
212
213 minfo "Presence tables succesfully created."
214 }  # end presence_create
215
216
217 extra_create () # pars: <database name>
218 {
219 if [ $# -ne 1 ] ; then
220         merr "extra_create function takes one param"
221         exit 1
222 fi
223
224 minfo "creating extra tables into $1 ..."
225
226 for TABLE in $EXTRA_MODULES; do
227     mdbg "Creating extra table: $TABLE"
228     sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
229     if [ $? -ne 0 ] ; then
230         merr "Creating extra tables failed!"
231         exit 1
232     fi
233 done
234
235 for TABLE in $EXTRA_TABLES; do
236         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
237         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
238         if [ $TABLE != "route_tree" ] ; then
239                 sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
240             sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
241         fi
242         if [ $? -ne 0 ] ; then
243                 merr "Grant privileges to extra tables failed!"
244                 exit 1
245         fi
246 done
247
248 minfo "Extra tables succesfully created."
249 }  # end extra_create
250
251
252 dbuid_create () # pars: <database name>
253 {
254         if [ $# -ne 1 ] ; then
255                 merr "dbuid_create function takes one param"
256                 exit 1
257         fi
258
259         minfo "creating uid tables into $1 ..."
260
261         for TABLE in $DBUID_MODULES; do
262                 mdbg "Creating uid table: $TABLE"
263                 sql_query $1 < $DB_SCHEMA/$TABLE-create.sql
264                 if [ $? -ne 0 ] ; then
265                         merr "Creating uid tables failed at $TABLE!"
266                         exit 1
267                         fi
268                 done
269         minfo "UID tables succesfully created."
270 }  # end uid_create