Просмотр исходного кода

improved postgres support + added db encoding

Serghey Rodin 14 лет назад
Родитель
Сommit
bb0f156b89
3 измененных файлов с 33 добавлено и 18 удалено
  1. 3 2
      bin/v_add_db_base
  2. 1 0
      bin/v_add_db_host
  3. 29 16
      func/db_func.sh

+ 3 - 2
bin/v_add_db_base

@@ -12,6 +12,7 @@ db_user="$user"_"$3"
 db_password="$4"
 type="$5"
 host=$6
+encoding="${7-UTF8}"
 
 # Importing variables
 source $VESTA/conf/vars.conf
@@ -24,10 +25,10 @@ source $V_FUNC/db_func.sh
 #----------------------------------------------------------#
 
 # Checking arg number
-check_args '5' "$#" 'user db db_user db_password type [host]'
+check_args '5' "$#" 'user db db_user db_password type [host] [encoding]'
 
 # Checking argument format
-format_validation 'user' 'database' 'db_user' 'db_password'
+format_validation 'user' 'database' 'db_user' 'db_password' 'encoding'
 
 # Checking db system is enabled
 is_system_enabled 'db'

+ 1 - 0
bin/v_add_db_host

@@ -68,6 +68,7 @@ esac
 
 # Adding host to conf
 echo "$new_str" >> $V_DB/$type.conf
+chmod 650 $V_DB/$type.conf
 
 
 #----------------------------------------------------------#

+ 29 - 16
func/db_func.sh

@@ -376,7 +376,8 @@ create_db_mysql() {
     fi
 
     # Adding database & checking result
-    $sql "CREATE DATABASE $database" >/dev/null 2>&1;code="$?"
+    $sql "CREATE DATABASE $database CHARACTER SET $encoding" > /dev/null 2>&1
+    code="$?"
     if [ '0' -ne "$code" ];  then
         echo "Error: Connect failed"
         log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
@@ -405,7 +406,7 @@ create_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -422,16 +423,27 @@ create_db_pgsql() {
         exit $E_DBHOST_UNAVAILABLE
     fi
 
-    # Adding database & checking result
-    $sql "CREATE DATABASE $database" >/dev/null 2>&1;code="$?"
+    # Adding new role
+    $sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'" >/dev/null
+    code=$?
     if [ '0' -ne "$code" ]; then
         echo "Error: Connect failed"
         log_event 'debug' "$E_DBHOST_UNAVAILABLE $V_EVENT"
         exit $E_DBHOST_UNAVAILABLE
     fi
 
-    $sql "CREATE ROLE $db_user WITH LOGIN PASSWORD '$db_password'"
-    $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user"
+    # Adding database & checking result
+    sql_q="CREATE DATABASE $database  OWNER $db_user" > /dev/null
+    if [ "$TPL" = 'template0' ]; then
+        sql_q="$sql_q ENCODING '$encoding' TEMPLATE $TPL" > /dev/null
+    else
+        sql_q="$sql_q TEMPLATE $TPL" > /dev/null
+    fi
+    $sql "$sql_q" >/dev/null
+
+
+    $sql "GRANT ALL PRIVILEGES ON DATABASE $database TO $db_user" > /dev/null
+    $sql "GRANT CONNECT ON DATABASE template1 to $db_user" > /dev/null
     export PGPASSWORD='pgsql'
 }
 
@@ -460,7 +472,7 @@ is_mysql_host_alive() {
 is_pgsql_host_alive() {
     # Checking connection
     export PGPASSWORD="$db_password"
-    sql="psql -h $host -U $db_user -d $template -p $port -c"
+    sql="psql -h $host -U $db_user -p $port -c "
     $sql "SELECT VERSION()" >/dev/null 2>&1;code="$?"
     if [ '0' -ne "$code" ];  then
         echo "Error: Connect failed"
@@ -545,7 +557,7 @@ change_db_pgsql_password() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -638,7 +650,7 @@ del_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -656,6 +668,7 @@ del_db_pgsql() {
     fi
 
     # Deleting database & checking result
+    $sql "REVOKE ALL PRIVILEGES ON DATABASE $database FROM $db_user">/dev/null
     $sql "DROP DATABASE $database" >/dev/null 2>&1;code="$?"
     if [ '0' -ne "$code" ]; then
         echo "Error: Connect failed"
@@ -666,10 +679,10 @@ del_db_pgsql() {
     # Deleting user
     check_users=$(grep "USER='$db_user'" $V_USERS/$user/db.conf |wc -l)
     if [ 1 -ge "$check_users" ]; then
-        $sql "DROP ROLE $db_user" >/dev/null 2>&1
-    else
-        $sql "REVOKE ALL PRIVILEGES ON $database FROM $db_user">/dev/null
+        $sql "REVOKE CONNECT ON DATABASE template1 FROM $db_user" >/dev/null
+        $sql "DROP ROLE $db_user" >/dev/null
     fi
+
     export PGPASSWORD='pgsql'
 }
 
@@ -727,7 +740,7 @@ dump_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
     dumper="pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f"
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -853,7 +866,7 @@ suspend_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -911,7 +924,7 @@ unsuspend_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
@@ -999,7 +1012,7 @@ get_disk_db_pgsql() {
     done
 
     export PGPASSWORD="$PASSWORD"
-    sql="psql -h $HOST -U $USER -d $TPL -p $PORT -c"
+    sql="psql -h $HOST -U $USER -p $PORT -c"
 
     # Checking empty vars
     if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then