Eli Mesika has uploaded a new change for review. Change subject: core: Adding cleandb.sh script ......................................................................
core: Adding cleandb.sh script The script enables to drop all database objects installed by oVirt and leaving a clean database. Basic usage: cleandb -u <user> -d <database> Change-Id: I7ff33e4ccb8cb66bbe06f5d1c8a00f22d28a2e31 Signed-off-by: Eli Mesika <emes...@redhat.com> --- A packaging/dbscripts/cleandb.sh M packaging/dbscripts/common_sp.sql M packaging/dbscripts/dbfunctions.sh 3 files changed, 96 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/16832/1 diff --git a/packaging/dbscripts/cleandb.sh b/packaging/dbscripts/cleandb.sh new file mode 100755 index 0000000..a21ae0d --- /dev/null +++ b/packaging/dbscripts/cleandb.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +################################################################################ +# Cleans DB by dropping all DB objects +################################################################################ + +#include db general functions +pushd $(dirname ${0})>/dev/null +source ./dbfunctions.sh +source ./dbcustomfunctions.sh + +#setting defaults +set_defaults + +usage() { + printf "Usage: ${ME} [-h] [-s SERVERNAME] [-p PORT] [-d DATABASE] [-u USERNAME] [-l LOGFILE] [-v]\n" + printf "\n" + printf "\t-s SERVERNAME - The database servername for the database (def. ${SERVERNAME})\n" + printf "\t-p PORT - The database port for the database (def. ${PORT})\n" + printf "\t-d DATABASE - The database name (def. ${DATABASE})\n" + printf "\t-u USERNAME - The username for the database (def. engine)\n" + printf "\t-l LOGFILE - The logfile for capturing output (def. ${LOGFILE}\n" + printf "\t-v - Turn on verbosity (WARNING: lots of output)\n" + printf "\t-h - This help text.\n" + printf "\n" + popd>/dev/null + exit $ret +} + +DEBUG () { + if $VERBOSE; then + printf "DEBUG: $*" + fi +} + +while getopts hs:d:u:p:lv option; do + case $option in + s) SERVERNAME=$OPTARG;; + p) PORT=$OPTARG;; + d) DATABASE=$OPTARG;; + u) USERNAME=$OPTARG;; + l) LOGFILE=$OPTARG;; + v) VERBOSE=true;; + h) ret=0 && usage;; + \?) ret=1 && usage;; + esac +done + +echo "Cleaning database..." +cleandb + +ret=$? +printf "Done.\n" +popd>/dev/null +exit $ret diff --git a/packaging/dbscripts/common_sp.sql b/packaging/dbscripts/common_sp.sql index d2374f4..3495052 100644 --- a/packaging/dbscripts/common_sp.sql +++ b/packaging/dbscripts/common_sp.sql @@ -296,6 +296,19 @@ END; $procedure$ LANGUAGE plpgsql; +Create or replace FUNCTION generate_drop_all_tables_syntax() RETURNS SETOF text + AS $procedure$ +BEGIN +RETURN QUERY select 'DROP TABLE if exists ' || table_name || ' CASCADE;' from information_schema.tables where table_schema = 'public' and table_type = 'BASE TABLE' order by table_name; +END; $procedure$ +LANGUAGE plpgsql; + +Create or replace FUNCTION generate_drop_all_seq_syntax() RETURNS SETOF text + AS $procedure$ +BEGIN +RETURN QUERY select 'DROP SEQUENCE if exists ' || sequence_name || ' CASCADE;' from information_schema.sequences where sequence_schema = 'public' order by sequence_name; +END; $procedure$ +LANGUAGE plpgsql; Create or replace FUNCTION fn_get_column_size( v_table varchar(64), v_column varchar(64)) returns integer AS $procedure$ diff --git a/packaging/dbscripts/dbfunctions.sh b/packaging/dbscripts/dbfunctions.sh index 7ce554c..4032233 100755 --- a/packaging/dbscripts/dbfunctions.sh +++ b/packaging/dbscripts/dbfunctions.sh @@ -68,6 +68,34 @@ return $retval } +#cleans db by dropping all objects +cleandb() { +# common stored procedures are executed first (for new added functions to be valid) +execute_file "common_sp.sql" ${DATABASE} ${SERVERNAME} ${PORT} > /dev/null + CMD="select * from generate_drop_all_seq_syntax();" + execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > drop_all_seq.sql + execute_file "drop_all_seq.sql" ${DATABASE} ${SERVERNAME} ${PORT}> /dev/null + \rm -f drop_all_seq.sql + CMD="select * from generate_drop_all_tables_syntax();" + execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > drop_all_tables.sql + execute_file "drop_all_tables.sql" ${DATABASE} ${SERVERNAME} ${PORT}> /dev/null + \rm -f drop_all_tables.sql + CMD="select * from generate_drop_all_views_syntax();" + execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > drop_all_views.sql + execute_file "drop_all_views.sql" ${DATABASE} ${SERVERNAME} ${PORT}> /dev/null + \rm -f drop_all_views.sql + CMD="select * from generate_drop_all_functions_syntax();" + execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > drop_all_functions.sql + execute_file "drop_all_functions.sql" ${DATABASE} ${SERVERNAME} ${PORT} > /dev/null + \rm -f drop_all_functions.sql + CMD="select count(*) from pg_proc where proname = 'uuid_nil';" + if [ "$(execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} | sed -e 's/ //g' -e '/^$/d')" != 0 ]; then + psql -U postgres -h ${SERVERNAME} -p ${PORT} -f drop_old_uuid_functions.sql ${DATABASE} > /dev/null + fi + CMD="DROP FUNCTION IF EXISTS uuid_generate_v1();" + execute_command "$CMD" ${DATABASE} ${SERVERNAME} ${PORT} > /dev/null +} + #drops views before upgrade or refresh operations drop_views() { # common stored procedures are executed first (for new added functions to be valid) -- To view, visit http://gerrit.ovirt.org/16832 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7ff33e4ccb8cb66bbe06f5d1c8a00f22d28a2e31 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <emes...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches