destroylang.sh
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #-------------------------------------------------------------------------
  3. #
  4. # createlang.sh--
  5. #    Remove a procedural language from a database
  6. #
  7. # Copyright (c) 1994, Regents of the University of California
  8. #
  9. #
  10. # IDENTIFICATION
  11. #    $Header: /usr/local/cvsroot/pgsql/src/bin/destroylang/destroylang.sh,v 1.1 1999/05/20 16:50:03 wieck Exp $
  12. #
  13. #-------------------------------------------------------------------------
  14. CMDNAME=`basename $0`
  15. # ----------
  16. # Determine username
  17. # ----------
  18. if [ -z "$USER" ]; then
  19.     if [ -z "$LOGNAME" ]; then
  20. if [ -z "`whoami`" ]; then
  21.     echo "$CMDNAME: cannot determine user name"
  22.     exit 1
  23. fi
  24.     else
  25. USER=$LOGNAME
  26. export USER
  27.     fi
  28. fi
  29. # ----------
  30. # Get options, language name and dbname
  31. # ----------
  32. dbname=$USER
  33. while [ -n "$1" ]
  34. do
  35. case $1 in 
  36. -a)  AUTHSYS=$2; shift;;
  37. -h)  PGHOST=$2; shift;;
  38. -p)  PGPORT=$2; shift;;
  39.  *)  langname=$1
  40.   if [ -n "$2" ]; then
  41. shift
  42. dbname=$1
  43. fi;;
  44. esac
  45. shift;
  46. done
  47. # ----------
  48. # If not given on the commandline, ask for the language
  49. # ----------
  50. if [ -z "$langname" ]; then
  51. echo -n "Language to remove from database $dbname: "
  52. read langname
  53. fi
  54. # ----------
  55. # Check if supported and set related values
  56. # ----------
  57. case "$langname" in
  58. plpgsql) lancomp="PL/pgSQL"
  59. handler="plpgsql_call_handler";;
  60. pltcl) lancomp="PL/Tcl"
  61. handler="pltcl_call_handler";;
  62. *) echo "$CMDNAME: unsupported language '$langname'"
  63. echo "          supported languages are plpgsql and pltcl"
  64. exit 1;;
  65. esac
  66. # ----------
  67. # Combine psql with options given
  68. # ----------
  69. if [ -z "$AUTHSYS" ]; then
  70.   AUTHOPT=""
  71. else
  72.   AUTHOPT="-a $AUTHSYS"
  73. fi
  74. if [ -z "$PGHOST" ]; then
  75.   PGHOSTOPT=""
  76. else
  77.   PGHOSTOPT="-h $PGHOST"
  78. fi
  79. if [ -z "$PGPORT" ]; then
  80.   PGPORTOPT=""
  81. else
  82.   PGPORTOPT="-p $PGPORT"
  83. fi
  84. MONITOR="psql -tq $AUTHOPT $PGHOSTOPT $PGPORTOPT -c"
  85. # ----------
  86. # Make sure the language is installed
  87. # ----------
  88. res=`$MONITOR "select oid from pg_language where lanname = '$langname'" $dbname`
  89. if [ $? -ne 0 ]; then
  90. echo "Cannot remove language"
  91. exit 1
  92. fi
  93. if [ -z "$res" ]; then
  94. echo "The language '$langname' isn't installed in database $dbname"
  95. exit 1
  96. fi
  97. # ----------
  98. # Check that there are no functions left defined in that language
  99. # ----------
  100. res=`$MONITOR "select count(proname) from pg_proc P, pg_language L where P.prolang = L.oid and L.lanname = '$langname'" $dbname`
  101. if [ $? -ne 0 ]; then
  102. echo "Cannot remove language"
  103. exit 1
  104. fi
  105. if [ $res -ne 0 ]; then
  106. echo "There are $res functions/trigger procedures actually declared"
  107. echo "in language $lancomp."
  108. echo "Language not removed."
  109. exit 1
  110. fi
  111. # ----------
  112. # Drop the language and the call handler function
  113. # ----------
  114. $MONITOR "drop procedural language '$langname'" $dbname
  115. if [ $? -ne 0 ]; then
  116. echo "Language removal failed"
  117. exit 1
  118. fi
  119. $MONITOR "drop function $handler()" $dbname
  120. if [ $? -ne 0 ]; then
  121. echo "Language removal failed"
  122. exit 1
  123. fi
  124. exit 0