postgresql.sh (1241B)
1 #!/bin/sh 2 3 PSQL="/usr/bin/psql" 4 5 free_megs() { 6 fsdir=$1 7 while [ ! -d "$fsdir" ]; do 8 fsdir=$(dirname $fsdir) 9 done 10 df -m $fsdir | while read fs bl us av cap mnt; do [ "$av" = "Available" ] || echo $av; done 11 } 12 13 pg_init_data() { 14 # make sure we got at least 50MB of free space 15 [ $(free_megs $1) -lt 50 ] && return 1 16 pg_ctl initdb -U postgres -D $1 17 } 18 19 pg_server_ready() { 20 t=0 21 while [ $t -le 90 ]; do 22 pg_ctl status -U postgres -D $1 2>/dev/null >/dev/null && return 0 23 t=$((t+1)) 24 sleep 1 25 done 26 return 1 27 } 28 29 # $1: dbname, $2: username, $3: password 30 pg_require_db() { 31 pg_test_db $@ && return 0 32 ( echo "CREATE DATABASE $1;" 33 echo -n "CREATE USER $2" 34 [ "$3" ] && echo -n " WITH PASSWORD '$3'" 35 echo ";" 36 echo "GRANT ALL PRIVILEGES ON DATABASE \"$1\" to $2;" ) | 37 $PSQL -U postgres -d template1 -e 38 return $? 39 } 40 41 pg_test_db() { 42 PGPASSWORD=$3 43 echo "SHOW ALL;" | $PSQL -U $2 -d $1 -q 2>/dev/null >/dev/null 44 return $? 45 } 46 47 uci_require_db() { 48 local dbname dbuser dbpass 49 config_get dbname $1 name 50 config_get dbuser $1 user 51 config_get dbpass $1 pass 52 pg_require_db $dbname $dbuser $dbpass 53 } 54 55 [ "$1" = "init" ] && { 56 . /lib/functions.sh 57 pg_server_ready $2 || exit 1 58 config_load postgresql 59 config_foreach uci_require_db postgres-db 60 }