123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- #!/bin/sh
- #
- # $Id$
- #
- # Script for adding and dropping SER Postgres tables
- #
- #################################################################
- # config vars
- #################################################################
- DEFAULT_DBNAME="ser"
- DEFAULT_SQLUSER="postgres"
- DEFAULT_SCRIPT_DIR=""
- DEFAULT_PSQL="/usr/bin/psql"
- DEFAULT_PG_DUMP="/usr/bin/pg_dump"
- DEFAULT_CREATE_SCRIPT="pg_create.sql"
- DEFAULT_DATA_SCRIPT="pg_data.sql"
- DEFAULT_DROP_SCRIPT="pg_drop.sql"
- #DBHOST="localhost"
- usage() {
- cat <<EOF
- Usage: $COMMAND create [database]
- $COMMAND drop [database]
- $COMMAND backup [database] <file>
- $COMMAND restore [database] <file>
- Command 'create' creates database named '${DBNAME}' containing tables needed
- for SER and SERWeb. In addition to that two users are created, one with
- read/write permissions and one with read-only permissions.
- Command 'drop' deletes database named '${DBNAME}' and associated users.
- Command 'backup' Dumps the contents of the database in <file>. If no
- database name is provided on the command line then the default '${DBNAME}'
- database will be used.
- Command 'restore' will load the datata previously saved with 'backup'
- command in the database. If no database name is provided on the command
- line then '${DBNAME}' database will be loaded.
- Note: Make sure that you have no conflicting data in the database before
- you execute 'restore' command.
- Environment variables:
- DBHOST Hostname of the Postgres server (${DBHOST})
- DBNAME Default name of SER database (${DBNAME})
- SQLUSER Database username with administrator privileges (${SQLUSER})
- (Make sure that the specified user has sufficient permissions
- to create databases, tables, and users)
- PSQL Full path to mysql command (${PSQL})
-
- Report bugs to <[email protected]>
- EOF
- } #usage
- # Dump the contents of the database to stdout
- db_save()
- {
- if [ $# -ne 2 ] ; then
- echo "ERROR: Bug in $COMMAND"
- exit 1
- fi
- $DUMP_CMD $1 > $2
- }
- # Load the contents of the database from a file
- db_load() #pars: <database name> <filename>
- {
- if [ $# -ne 2 ] ; then
- echo "ERROR: Bug in $COMMAND"
- exit 1
- fi
- echo "CREATE DATABASE $1" | $CMD "template1"
- $CMD $1 < $2
- }
- # Drop SER database
- db_drop()
- {
- # Drop database
- # Revoke user permissions
- echo "Dropping database $1"
- $CMD "template1" < ${SCRIPT_DIR}/${DROP_SCRIPT}
- echo "DROP DATABASE $1" | $CMD "template1"
- }
- # Create SER database
- db_create ()
- {
- echo "Creating database $1"
- echo "CREATE DATABASE $1" | $CMD "template1"
- $CMD $1 < ${SCRIPT_DIR}/${CREATE_SCRIPT}
- $CMD $1 < ${SCRIPT_DIR}/${DATA_SCRIPT}
- }
- # Convert relative path to the script directory to absolute if necessary by
- # extracting the directory of this script and prefixing the relative path with
- # it.
- abs_script_dir()
- {
- my_dir=`dirname $0`;
- if [ "${SCRIPT_DIR:0:1}" != "/" ] ; then
- SCRIPT_DIR="${my_dir}/${SCRIPT_DIR}"
- fi
- }
- # Main program
- COMMAND=`basename $0`
- if [ ! -z "$DBHOST" ]; then
- DBHOST="-h ${DBHOST}"
- fi
- if [ -z "$DBNAME" ]; then
- DBNAME=$DEFAULT_DBNAME;
- fi
- if [ -z "$SQLUSER" ]; then
- SQLUSER=$DEFAULT_SQLUSER;
- fi
- if [ -z "$PSQL" ]; then
- PSQL=$DEFAULT_PSQL;
- fi
- if [ -z "$PG_DUMP" ]; then
- PG_DUMP=$DEFAULT_PG_DUMP;
- fi
- if [ -z "$CREATE_SCRIPT" ]; then
- CREATE_SCRIPT=$DEFAULT_CREATE_SCRIPT;
- fi
- if [ -z "$DATA_SCRIPT" ]; then
- DATA_SCRIPT=$DEFAULT_DATA_SCRIPT;
- fi
- if [ -z "$DROP_SCRIPT" ]; then
- DROP_SCRIPT=$DEFAULT_DROP_SCRIPT;
- fi
- if [ -z "$SCRIPT_DIR" ]; then
- SCRIPT_DIR=$DEFAULT_SCRIPT_DIR;
- fi
- if [ $# -eq 0 ]; then
- usage
- exit 1
- fi
- if [ ! -x $PSQL ]; then
- echo "ERROR: Could not execute Postgres tool $PSQL, please set PSQL variable"
- echo " Run ($COMMAND without parameters for more information)"
- exit 1
- fi
- CMD="$PSQL ${DBHOST} -U $SQLUSER"
- DUMP_CMD="$PG_DUMP ${DBHOST} -U $SQLUSER"
- abs_script_dir
- case $1 in
- create) # Create SER database and users
- shift
- if [ $# -eq 1 ]; then
- db_create $1
- elif [ $# -eq 0 ]; then
- db_create ${DBNAME}
- else
- usage
- exit 1
- fi
- exit $?
- ;;
-
- drop) # Drop SER database and users
- shift
- if [ $# -eq 1 ]; then
- db_drop $1
- elif [ $# -eq 0 ]; then
- db_drop ${DBNAME}
- else
- usage
- exit 1
- fi
- exit $?
- ;;
- backup) # backup SER database
- shift
- if [ $# -eq 1 ]; then
- db_save ${DBNAME} $1
- elif [ $# -eq 2 ]; then
- db_save $1 $2
- else
- usage
- exit 1
- fi
- exit $?
- ;;
- restore) # restore SER database
- shift
- if [ $# -eq 1 ]; then
- db_load ${DBNAME} $1
- elif [ $# -eq 2 ]; then
- db_load $1 $2
- else
- usage
- exit 1
- fi
- exit $?
- ;;
- *)
- usage
- exit 1;
- ;;
- esac
|