kamctl: added DBPORT option
[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 if [ -z "$DBPORT" ] ; then
55         CMD="psql -q -h $DBHOST -U $DBROOTUSER "
56         DUMP_CMD="pg_dump -h $DBHOST -U $DBROOTUSER -c"
57 else
58         CMD="psql -q -h $DBHOST -p $DBHOST -U $DBROOTUSER "
59         DUMP_CMD="pg_dump -h $DBHOST -p $DBHOST -U $DBROOTUSER -c"
60 fi
61
62 #################################################################
63
64
65 # execute sql command with optional db name
66 sql_query()
67 {
68         if [ $# -gt 1 ] ; then
69                 if [ -n "$1" ]; then
70                         DB="$1"
71                 else
72                         DB=""
73                 fi
74                 shift
75                 $CMD -d $DB -c "$@"
76         else
77                 $CMD "$@"
78         fi
79 }
80
81
82 kamailio_drop()  # pars: <database name>
83 {
84 if [ $# -ne 1 ] ; then
85         merr "kamailio_drop function takes two params"
86         exit 1
87 fi
88
89 sql_query "template1" "drop database \"$1\";"
90 if [ $? -ne 0 ] ; then
91         merr "Dropping database $1 failed!"
92         exit 1
93 fi
94
95 # postgresql users are not dropped automatically
96 sql_query "template1" "drop user \"$DBRWUSER\"; drop user \"$DBROUSER\";"
97
98 if [ $? -ne 0 ] ; then
99         mwarn "Could not drop $DBRWUSER or $DBROUSER users, try to continue.."
100 else 
101         minfo "Database user deleted"
102 fi
103
104 minfo "Database $1 dropped"
105 } #kamailio_drop
106
107
108 kamailio_create () # pars: <database name>
109 {
110 if [ $# -ne 1 ] ; then
111         merr "kamailio_create function takes one param"
112         exit 1
113 fi
114
115 minfo "creating database $1 ..."
116
117 sql_query "template1" "create database \"$1\";"
118 if [ $? -ne 0 ] ; then
119         merr "Creating database failed!"
120         exit 1
121 fi
122
123 sql_query "$1" "CREATE FUNCTION "concat" (text,text) RETURNS text AS 'SELECT \$1 || \$2;' LANGUAGE 'sql';
124                 CREATE FUNCTION "rand" () RETURNS double precision AS 'SELECT random();' LANGUAGE 'sql';"
125 # emulate mysql proprietary functions used by the lcr module in postgresql
126
127 if [ $? -ne 0 ] ; then
128         merr "Creating mysql emulation functions failed!"
129         exit 1
130 fi
131
132 for TABLE in $STANDARD_MODULES; do
133     mdbg "Creating core table: $TABLE"
134     sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
135     if [ $? -ne 0 ] ; then
136         merr "Creating core tables failed!"
137         exit 1
138     fi
139 done
140
141 sql_query "$1" "CREATE USER $DBRWUSER WITH PASSWORD '$DBRWPW';
142                 CREATE USER $DBROUSER WITH PASSWORD '$DBROPW';"
143 if [ $? -ne 0 ] ; then
144         mwarn "Create user in database failed, perhaps they allready exist? Try to continue.."
145 fi
146
147 for TABLE in $STANDARD_TABLES; do
148         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
149         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
150         if [ $TABLE != "version" ] ; then
151                 sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
152         sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
153         fi
154
155         if [ $? -ne 0 ] ; then
156                 merr "Grant privileges to standard tables failed!"
157                 exit 1
158         fi
159 done
160
161 if [ -e $DB_SCHEMA/extensions-create.sql ]
162 then
163         minfo "Creating custom extensions tables"
164         sql_query $1 < $DB_SCHEMA/extensions-create.sql
165         if [ $? -ne 0 ] ; then
166         merr "Creating custom extensions tables failed!"
167         exit 1
168         fi
169 fi
170
171 minfo "Core Kamailio tables succesfully created."
172
173 get_answer $INSTALL_PRESENCE_TABLES "Install presence related tables? (y/n): "
174 if [ "$ANSWER" = "y" ]; then
175         presence_create $1
176 fi
177
178 get_answer $INSTALL_EXTRA_TABLES "Install tables for $EXTRA_MODULES? (y/n): "
179 if [ "$ANSWER" = "y" ]; then
180         extra_create $1
181 fi
182 } # kamailio_create
183
184
185 presence_create () # pars: <database name>
186 {
187 if [ $# -ne 1 ] ; then
188         merr "presence_create function takes one param"
189         exit 1
190 fi
191
192 minfo "creating presence tables into $1 ..."
193
194 sql_query "$1" < $DB_SCHEMA/presence-create.sql
195
196 if [ $? -ne 0 ] ; then
197         merr "Failed to create presence tables!"
198         exit 1
199 fi
200
201 sql_query "$1" < $DB_SCHEMA/rls-create.sql
202
203 if [ $? -ne 0 ] ; then
204         merr "Failed to create rls-presence tables!"
205         exit 1
206 fi
207
208 for TABLE in $PRESENCE_TABLES; do
209         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
210         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
211         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
212     sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
213         if [ $? -ne 0 ] ; then
214                 merr "Grant privileges to presence tables failed!"
215                 exit 1
216         fi
217 done
218
219 minfo "Presence tables succesfully created."
220 }  # end presence_create
221
222
223 extra_create () # pars: <database name>
224 {
225 if [ $# -ne 1 ] ; then
226         merr "extra_create function takes one param"
227         exit 1
228 fi
229
230 minfo "creating extra tables into $1 ..."
231
232 for TABLE in $EXTRA_MODULES; do
233     mdbg "Creating extra table: $TABLE"
234     sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
235     if [ $? -ne 0 ] ; then
236         merr "Creating extra tables failed!"
237         exit 1
238     fi
239 done
240
241 for TABLE in $EXTRA_TABLES; do
242         sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
243         sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
244         if [ $TABLE != "route_tree" ] ; then
245                 sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
246             sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
247         fi
248         if [ $? -ne 0 ] ; then
249                 merr "Grant privileges to extra tables failed!"
250                 exit 1
251         fi
252 done
253
254 minfo "Extra tables succesfully created."
255 }  # end extra_create
256
257
258 dbuid_create () # pars: <database name>
259 {
260         if [ $# -ne 1 ] ; then
261                 merr "dbuid_create function takes one param"
262                 exit 1
263         fi
264
265         minfo "creating uid tables into $1 ..."
266
267         for TABLE in $DBUID_MODULES; do
268                 mdbg "Creating uid table: $TABLE"
269                 sql_query $1 < $DB_SCHEMA/$TABLE-create.sql
270                 if [ $? -ne 0 ] ; then
271                         merr "Creating uid tables failed at $TABLE!"
272                         exit 1
273                         fi
274                 done
275         minfo "UID tables succesfully created."
276 }  # end uid_create