#!/bin/bash
prefix = '\033['
RED = $prefix '0;31m'
UNDIM = $prefix '22m'
RESET = $prefix '0m'
REPODIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " >/dev/null 2>& 1 && cd ../.. && pwd ) "
source .env
if [ -z " $DB_HOST " ] ; then
echo "No DB_HOST found"
exit 1
fi
if [ -z " $DB_NAME " ] ; then
echo "No DB_NAME found"
exit 1
fi
if [ -z " $DB_USER " ] ; then
echo "No DB_USER found"
exit 1
fi
if [ -z " $DB_PASS " ] ; then
echo "No DB_PASS found"
exit 1
fi
function handleError {
if [ $? -ne 0 ] ; then
echo -e " $UNDIM $RESET "
echo -e $RED "ERROR:" $RESET $1
exit 1
fi
}
echo "Reading current state from database . . ."
FUNCTION_QUERY = " SELECT 'DROP FUNCTION sos.' || ns.nspname || '.' || proname
|| '(' || oidvectortypes( proargtypes) || ');'
FROM pg_proc INNER JOIN pg_namespace ns ON ( pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'sos'
and proname not in ( 'uuid_generate_v1' , 'uuid_generate_v1mc' , 'uuid_generate_v3' , 'uuid_generate_v5' , 'uuid_generate_v4' , 'uuid_nil' , 'uuid_ns_dns' , 'uuid_ns_oid' , 'uuid_ns_url' , 'uuid_ns_x500' )
order by proname; "
VIEW_QUERY = " SELECT 'DROP VIEW IF EXISTS sos.' || table_name || ' CASCADE;'
FROM information_schema.views
WHERE table_schema = 'sos' ; "
FUNCTION_DROP = " $( PGPASSWORD = " $DB_PASS " psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c " $FUNCTION_QUERY " | grep "DROP FUNCTION" ) "
VIEW_DROP = " $( PGPASSWORD = " $DB_PASS " psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c " $VIEW_QUERY " | grep "DROP VIEW" ) "
NUM_FUNCS = $( echo " $FUNCTION_DROP " | wc -l)
NUM_VIEWS = $( echo " $VIEW_DROP " | wc -l)
echo -e $RED " Warning: About to drop $NUM_FUNCS functions and $NUM_VIEWS views " $RESET
read -p "Continue? "
if [ [ $REPLY = ~ ^[ Yy] $ ] ]
then
:
else
echo "Cancelling"
exit 1
fi
echo "Reinitializing views and functions . . ."
PGPASSWORD = " $DB_PASS " psql -h $DB_HOST -U $DB_USER -d $DB_NAME \
--single-transaction \
-f <( echo " $FUNCTION_DROP " ) \
-f <( echo " $VIEW_DROP " ) \
-f $REPODIR /db/sql/2-views.sql \
-f $REPODIR /db/sql/3-functions.sql \
-f $REPODIR /db/sql/4-permissions.sql \
> /dev/null