A few improvements to database creation.

Inspired by Peter Eisentraut's blog post about writing scripts
for PostgreSQL.
This commit is contained in:
Andrew McMillan 2010-05-12 22:14:32 +12:00
parent f1a1c2fa73
commit 2f8eb21b82
2 changed files with 14 additions and 10 deletions

View File

@ -32,19 +32,19 @@ export AWL_DBAUSER=davical_dba
export AWL_APPUSER=davical_app
# Get the major version for PostgreSQL
export DBVERSION="`psql -qAt -c "SELECT version();" template1 | cut -f2 -d' ' | cut -f1-2 -d'.'`"
export DBVERSION="`psql -qXAt -c "SELECT version();" template1 | cut -f2 -d' ' | cut -f1-2 -d'.'`"
install_note() {
cat >>"${INSTALL_NOTE_FN}"
}
db_users() {
psql -qAt -c "SELECT usename FROM pg_user;" template1
psql -qXAt -c "SELECT usename FROM pg_user;" template1
}
create_db_user() {
if ! db_users | grep "^${1}$" >/dev/null ; then
psql -qAt -c "CREATE USER ${1} NOCREATEDB NOCREATEROLE;" template1
psql -qXAt -c "CREATE USER ${1} NOCREATEDB NOCREATEROLE;" template1
cat <<EONOTE | install_note
* You will need to edit the PostgreSQL pg_hba.conf to allow the
'${1}' database user access to the 'davical' database.
@ -54,15 +54,17 @@ EONOTE
}
create_plpgsql_language() {
if ! psql ${DBA} -qAt -c "SELECT lanname FROM pg_language;" "${DBNAME}" | grep "^plpgsql$" >/dev/null; then
if ! psql ${DBA} -qXAt -c "SELECT lanname FROM pg_language;" "${DBNAME}" | grep "^plpgsql$" >/dev/null; then
createlang plpgsql "${DBNAME}"
fi
}
try_db_user() {
[ "XtestX`psql -U "${1}" -qAt -c \"SELECT usename FROM pg_user;\" \"${DBNAME}\" 2>/dev/null`" != "XtestX" ]
[ "XtestX`psql -U "${1}" -qXAt -c \"SELECT usename FROM pg_user;\" \"${DBNAME}\" 2>/dev/null`" != "XtestX" ]
}
# Hide all the annoying NOTICE... messages
export PGOPTIONS='--client-min-messages=warning'
create_db_user "${AWL_DBAUSER}"
create_db_user "${AWL_APPUSER}"
@ -113,12 +115,12 @@ create_plpgsql_language
#
# Load the AWL base tables and schema management tables
psql -qAt ${DBA} -f "${AWLDIR}/dba/awl-tables.sql" "${DBNAME}" 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: )"
psql -qAt ${DBA} -f "${AWLDIR}/dba/schema-management.sql" "${DBNAME}" 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: |^t$)"
psql -qXAt ${DBA} -f "${AWLDIR}/dba/awl-tables.sql" "${DBNAME}" 2>&1
psql -qXAt ${DBA} -f "${AWLDIR}/dba/schema-management.sql" "${DBNAME}" 2>&1
#
# Load the DAViCal tables
psql -qAt ${DBA} -f "${DBADIR}/davical.sql" "${DBNAME}" 2>&1 | egrep -v "(^CREATE |^GRANT|^BEGIN|^COMMIT| NOTICE: |^t$)"
psql -qXAt ${DBA} -f "${DBADIR}/davical.sql" "${DBNAME}" 2>&1
#
# Set permissions for the application DB user on the database
@ -139,7 +141,7 @@ EOFAILURE
fi
#
# Load the required base data
psql -qAt ${DBA} -f "${DBADIR}/base-data.sql" "${DBNAME}" | egrep -v '^10'
psql -qXAt ${DBA} -f "${DBADIR}/base-data.sql" "${DBNAME}" | egrep -v '^10'
#
# We can override the admin password generation for regression testing predictability
@ -163,7 +165,7 @@ if [ "$ADMINPW" = "" ] ; then
ADMINPW="please change this password"
fi
psql -q -c "UPDATE usr SET password = '**${ADMINPW}' WHERE user_no = 1;" "${DBNAME}"
psql -qX -c "UPDATE usr SET password = '**${ADMINPW}' WHERE user_no = 1;" "${DBNAME}"
echo "NOTE"
echo "===="

View File

@ -1,3 +1,5 @@
Supported locales updated.
Updated view: dav_principal.sql applied.
CalDAV functions updated.