|
|
- #!/bin/sh
-
- PSQL="/usr/bin/psql"
-
- free_megs() {
- fsdir=$1
- while [ ! -d "$fsdir" ]; do
- fsdir=$(dirname $fsdir)
- done
- df -m $fsdir | while read fs bl us av cap mnt; do [ "$av" = "Available" ] || echo $av; done
- }
-
- pg_init_data() {
- # make sure we got at least 50MB of free space
- [ $(free_megs $1) -lt 50 ] && return 1
- pg_ctl initdb -U postgres -D $1
- }
-
- pg_server_ready() {
- t=0
- while [ $t -le 90 ]; do
- pg_ctl status -U postgres -D $1 2>/dev/null >/dev/null && return 0
- t=$((t+1))
- sleep 1
- done
- return 1
- }
-
- # $1: dbname, $2: username, $3: password
- pg_require_db() {
- pg_test_db $@ && return 0
- ( echo "CREATE DATABASE $1;"
- echo -n "CREATE USER $2"
- [ "$3" ] && echo -n " WITH PASSWORD '$3'"
- echo ";"
- echo "GRANT ALL PRIVILEGES ON DATABASE \"$1\" to $2;" ) |
- $PSQL -U postgres -d template1 -e
- return $?
- }
-
- pg_test_db() {
- PGPASSWORD=$3
- echo "SHOW ALL;" | $PSQL -U $2 -d $1 -q 2>/dev/null >/dev/null
- return $?
- }
-
- uci_require_db() {
- local dbname dbuser dbpass
- config_get dbname $1 name
- config_get dbuser $1 user
- config_get dbpass $1 pass
- pg_require_db $dbname $dbuser $dbpass
- }
-
- [ "$1" = "init" ] && {
- . /lib/functions.sh
- pg_server_ready $2 || exit 1
- config_load postgresql
- config_foreach uci_require_db postgres-db
- }
|