From b491ee17fd4bf5c04f82676d9e2a0b35180ce8aa Mon Sep 17 00:00:00 2001 From: Andrew McMillan Date: Mon, 5 Nov 2007 18:25:40 +1300 Subject: [PATCH] More careful construction of the database, using a DBA user to own it. --- dba/create-database.sh | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/dba/create-database.sh b/dba/create-database.sh index 96a9b82b..a5acb121 100755 --- a/dba/create-database.sh +++ b/dba/create-database.sh @@ -8,16 +8,38 @@ ADMINPW="${2}" DBADIR="`dirname \"$0\"`" +export AWL_DBAUSER=davical_dba +export AWL_APPUSER=davical_app + +# Get the major version for PostgreSQL +export DBVERSION="`psql -qAt template1 -c "SELECT version();" | cut -f2 -d' ' | cut -f1-2 -d'.'`" + +db_users() { + psql -qAt template1 -c "SELECT usename FROM pg_user;"; +} + +create_db_user() { + if ! db_users | grep "^${1}$" >/dev/null ; then + createuser --no-superuser --no-createdb --no-createrole "${1}" + fi +} + +create_plpgsql_language() { + if ! psql -qAt template1 -c "SELECT lanname FROM pg_language;" | grep "^plpgsql$" >/dev/null; then + createlang plpgsql "${DBNAME}" + fi +} + +create_db_user "${AWL_DBAUSER}" +create_db_user "${AWL_APPUSER}" + # FIXME: Need to check that the database was actually created. -if ! createdb -E UTF8 "${DBNAME}" -T template0 ; then +if ! createdb --encoding UTF8 "${DBNAME}" --template template0 --owner "${AWL_DBAUSER}"; then echo "Unable to create database" exit 1 fi -# -# This will fail if the language already exists, but it should not -# because we created from template0. -createlang plpgsql "${DBNAME}" +create_plpgsql_language # # FIXME: filter non-error output