kamdbctl.pgsql 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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. # path to the database schemas
  30. DATA_DIR="/usr/local/share/kamailio"
  31. if [ -d "$DATA_DIR/postgres" ] ; then
  32. DB_SCHEMA="$DATA_DIR/postgres"
  33. else
  34. DB_SCHEMA="./postgres"
  35. fi
  36. #################################################################
  37. # config vars
  38. #################################################################
  39. # full privileges Postgres user
  40. if [ -z "$DBROOTUSER" ]; then
  41. DBROOTUSER="postgres"
  42. if [ ! -r ~/.pgpass ]; then
  43. merr "~/.pgpass does not exist"
  44. merr "create this file and add proper credentials for user postgres"
  45. merr "Note: you need at least postgresql>= 7.3"
  46. merr "Hint: .pgpass hostname must match DBHOST"
  47. exit 1
  48. fi
  49. fi
  50. if [ -z "$DBPORT" ] ; then
  51. CMD="psql -q -h $DBHOST -U $DBROOTUSER "
  52. DUMP_CMD="pg_dump -h $DBHOST -U $DBROOTUSER -c"
  53. else
  54. CMD="psql -q -h $DBHOST -p $DBPORT -U $DBROOTUSER "
  55. DUMP_CMD="pg_dump -h $DBHOST -p $DBPORT -U $DBROOTUSER -c"
  56. fi
  57. #################################################################
  58. # execute sql command with optional db name
  59. sql_query()
  60. {
  61. if [ $# -gt 1 ] ; then
  62. if [ -n "$1" ]; then
  63. DB="$1"
  64. else
  65. DB=""
  66. fi
  67. shift
  68. $CMD -d $DB -c "$@"
  69. else
  70. $CMD "$@"
  71. fi
  72. }
  73. kamailio_drop() # pars: <database name>
  74. {
  75. if [ $# -ne 1 ] ; then
  76. merr "kamailio_drop function takes two params"
  77. exit 1
  78. fi
  79. sql_query "template1" "drop database \"$1\";"
  80. if [ $? -ne 0 ] ; then
  81. merr "Dropping database $1 failed!"
  82. exit 1
  83. fi
  84. # postgresql users are not dropped automatically
  85. sql_query "template1" "drop user \"$DBRWUSER\"; drop user \"$DBROUSER\";"
  86. if [ $? -ne 0 ] ; then
  87. mwarn "Could not drop $DBRWUSER or $DBROUSER users, try to continue.."
  88. else
  89. minfo "Database user deleted"
  90. fi
  91. minfo "Database $1 dropped"
  92. } #kamailio_drop
  93. kamailio_create () # pars: <database name>
  94. {
  95. if [ $# -ne 1 ] ; then
  96. merr "kamailio_create function takes one param"
  97. exit 1
  98. fi
  99. minfo "creating database $1 ..."
  100. sql_query "template1" "create database \"$1\";"
  101. if [ $? -ne 0 ] ; then
  102. merr "Creating database failed!"
  103. exit 1
  104. fi
  105. sql_query "$1" "CREATE FUNCTION "concat" (text,text) RETURNS text AS 'SELECT \$1 || \$2;' LANGUAGE 'sql';
  106. CREATE FUNCTION "rand" () RETURNS double precision AS 'SELECT random();' LANGUAGE 'sql';"
  107. # emulate mysql proprietary functions used by the lcr module in postgresql
  108. if [ $? -ne 0 ] ; then
  109. merr "Creating mysql emulation functions failed!"
  110. exit 1
  111. fi
  112. for TABLE in $STANDARD_MODULES; do
  113. mdbg "Creating core table: $TABLE"
  114. sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
  115. if [ $? -ne 0 ] ; then
  116. merr "Creating core tables failed!"
  117. exit 1
  118. fi
  119. done
  120. sql_query "$1" "CREATE USER $DBRWUSER WITH PASSWORD '$DBRWPW';
  121. CREATE USER $DBROUSER WITH PASSWORD '$DBROPW';"
  122. if [ $? -ne 0 ] ; then
  123. mwarn "Create user in database failed, perhaps they allready exist? Try to continue.."
  124. fi
  125. for TABLE in $STANDARD_TABLES; do
  126. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
  127. sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
  128. if [ $TABLE != "version" ] ; then
  129. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
  130. sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
  131. fi
  132. if [ $? -ne 0 ] ; then
  133. merr "Grant privileges to standard tables failed!"
  134. exit 1
  135. fi
  136. done
  137. if [ -e $DB_SCHEMA/extensions-create.sql ]
  138. then
  139. minfo "Creating custom extensions tables"
  140. sql_query $1 < $DB_SCHEMA/extensions-create.sql
  141. if [ $? -ne 0 ] ; then
  142. merr "Creating custom extensions tables failed!"
  143. exit 1
  144. fi
  145. fi
  146. minfo "Core Kamailio tables succesfully created."
  147. get_answer $INSTALL_PRESENCE_TABLES "Install presence related tables? (y/n): "
  148. if [ "$ANSWER" = "y" ]; then
  149. presence_create $1
  150. fi
  151. get_answer $INSTALL_EXTRA_TABLES "Install tables for $EXTRA_MODULES? (y/n): "
  152. if [ "$ANSWER" = "y" ]; then
  153. extra_create $1
  154. fi
  155. } # kamailio_create
  156. presence_create () # pars: <database name>
  157. {
  158. if [ $# -ne 1 ] ; then
  159. merr "presence_create function takes one param"
  160. exit 1
  161. fi
  162. minfo "creating presence tables into $1 ..."
  163. sql_query "$1" < $DB_SCHEMA/presence-create.sql
  164. if [ $? -ne 0 ] ; then
  165. merr "Failed to create presence tables!"
  166. exit 1
  167. fi
  168. sql_query "$1" < $DB_SCHEMA/rls-create.sql
  169. if [ $? -ne 0 ] ; then
  170. merr "Failed to create rls-presence tables!"
  171. exit 1
  172. fi
  173. for TABLE in $PRESENCE_TABLES; do
  174. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
  175. sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
  176. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
  177. sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
  178. if [ $? -ne 0 ] ; then
  179. merr "Grant privileges to presence tables failed!"
  180. exit 1
  181. fi
  182. done
  183. minfo "Presence tables succesfully created."
  184. } # end presence_create
  185. extra_create () # pars: <database name>
  186. {
  187. if [ $# -ne 1 ] ; then
  188. merr "extra_create function takes one param"
  189. exit 1
  190. fi
  191. minfo "creating extra tables into $1 ..."
  192. for TABLE in $EXTRA_MODULES; do
  193. mdbg "Creating extra table: $TABLE"
  194. sql_query "$1" < $DB_SCHEMA/$TABLE-create.sql
  195. if [ $? -ne 0 ] ; then
  196. merr "Creating extra tables failed!"
  197. exit 1
  198. fi
  199. done
  200. for TABLE in $EXTRA_TABLES; do
  201. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE $TABLE TO $DBRWUSER;"
  202. sql_query "$1" "GRANT SELECT ON TABLE $TABLE TO $DBROUSER;"
  203. if [ $TABLE != "route_tree" ] && [ $TABLE != "dr_gateways" ] && [ $TABLE != "dr_rules" ] ; then
  204. sql_query "$1" "GRANT ALL PRIVILEGES ON TABLE "$TABLE"_id_seq TO $DBRWUSER;"
  205. sql_query "$1" "GRANT SELECT ON TABLE "$TABLE"_id_seq TO $DBROUSER;"
  206. fi
  207. if [ $? -ne 0 ] ; then
  208. merr "Grant privileges to extra tables failed!"
  209. exit 1
  210. fi
  211. done
  212. minfo "Extra tables succesfully created."
  213. } # end extra_create
  214. dbuid_create () # pars: <database name>
  215. {
  216. if [ $# -ne 1 ] ; then
  217. merr "dbuid_create function takes one param"
  218. exit 1
  219. fi
  220. minfo "creating uid tables into $1 ..."
  221. for TABLE in $DBUID_MODULES; do
  222. mdbg "Creating uid table: $TABLE"
  223. sql_query $1 < $DB_SCHEMA/$TABLE-create.sql
  224. if [ $? -ne 0 ] ; then
  225. merr "Creating uid tables failed at $TABLE!"
  226. exit 1
  227. fi
  228. done
  229. minfo "UID tables succesfully created."
  230. } # end uid_create