diff --git a/policy-db-migrator/smoke-test/mariadb-tests.sh b/policy-db-migrator/smoke-test/mariadb-tests.sh
new file mode 100755
index 0000000..a5f1e31
--- /dev/null
+++ b/policy-db-migrator/smoke-test/mariadb-tests.sh
@@ -0,0 +1,332 @@
+#!/bin/sh
+# ============LICENSE_START====================================================
+#  Copyright (C) 2022 Nordix Foundation.
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END======================================================
+# shellcheck disable=SC2039
+# shellcheck disable=SC2086
+# shellcheck disable=SC2012
+echo "Start of test $(date +%F-%T)"
+
+export POLICY_HOME=/opt/app/policy
+export SQL_USER=policy_user
+export SQL_PASSWORD=policy_user
+export SQL_HOST=mariadb
+export MYSQL_ROOT_PASSWORD=secret
+export SCHEMA=policyadmin
+export SCRIPT_DIRECTORY=sql
+
+# Test variables
+TOTAL_COUNT=0
+HONOLULU_UPGRADE_COUNT=$(ls /home/policy/sql/0800/upgrade/*.sql | wc -l)
+HONOLULU_DOWNGRADE_COUNT=$(ls /home/policy/sql/0800/downgrade/*.sql | wc -l)
+ISTANBUL_UPGRADE_COUNT=$(ls /home/policy/sql/0900/upgrade/*.sql | wc -l)
+ISTANBUL_DOWNGRADE_COUNT=$(ls /home/policy/sql/0900/downgrade/*.sql | wc -l)
+JAKARTA_UPGRADE_COUNT=$(ls /home/policy/sql/1000/upgrade/*.sql | wc -l)
+JAKARTA_DOWNGRADE_COUNT=$(ls /home/policy/sql/1000/downgrade/*.sql | wc -l)
+
+NEW_SQL_EXECUTIONS=0
+START_VERSION=""
+PREVIOUS_SQL_EXECUTIONS=0
+END_VERSION=""
+RECENT_SQL_EXECUTIONS=0
+END_STATUS=0
+TEST_STATUS="FAIL"
+TEST_MSG=""
+TESTS=0
+PASSED=0
+FAILED=0
+
+# SQL statements
+PDPSTATISTICS="CREATE TABLE IF NOT EXISTS pdpstatistics ("
+PDPSTATISTICS=${PDPSTATISTICS}"PDPGROUPNAME VARCHAR(120) NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"PDPSUBGROUPNAME VARCHAR(120) NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYDEPLOYCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYDEPLOYFAILCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYDEPLOYSUCCESSCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYEXECUTEDCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYEXECUTEDFAILCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"POLICYEXECUTEDSUCCESSCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS}"POLICYUNDEPLOYCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS2}"POLICYUNDEPLOYFAILCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS2}"POLICYUNDEPLOYSUCCESSCOUNT BIGINT DEFAULT NULL NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"timeStamp datetime NOT NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS2}"timeStamp datetime DEFAULT NULL NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS2}"ID BIGINT NOT NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"name VARCHAR(120) NOT NULL, "
+PDPSTATISTICS2=${PDPSTATISTICS2}"name VARCHAR(120) NOT NULL, "
+PDPSTATISTICS=${PDPSTATISTICS}"version VARCHAR(20) NOT NULL,"
+PDPSTATISTICS2=${PDPSTATISTICS2}"version VARCHAR(20) NOT NULL,"
+PDPSTATISTICS=${PDPSTATISTICS}"CONSTRAINT PK_PDPSTATISTICS PRIMARY KEY (timeStamp, name, version));"
+PDPSTATISTICS2=${PDPSTATISTICS2}"CONSTRAINT PK_PDPSTATISTICS PRIMARY KEY (ID, name, version));"
+
+IDX_TSIDX1="CREATE INDEX IDX_TSIDX1 ON pdpstatistics(timeStamp, name, version);"
+INSERT="INSERT INTO pdpstatistics(PDPGROUPNAME,PDPSUBGROUPNAME,POLICYDEPLOYCOUNT,POLICYDEPLOYFAILCOUNT,POLICYDEPLOYSUCCESSCOUNT,"
+INSERT1="${INSERT}""POLICYEXECUTEDCOUNT,POLICYEXECUTEDFAILCOUNT,POLICYEXECUTEDSUCCESSCOUNT,timeStamp,name,version)"
+INSERT2="${INSERT}""POLICYEXECUTEDCOUNT,POLICYEXECUTEDFAILCOUNT,POLICYEXECUTEDSUCCESSCOUNT,POLICYUNDEPLOYCOUNT,"
+INSERT2="${INSERT2}""POLICYUNDEPLOYFAILCOUNT,POLICYUNDEPLOYSUCCESSCOUNT,timeStamp,ID,name,version)"
+SQL1="${INSERT1}"" values('groupname', 'subgroup',1,1,1,1,1,1,now(),'test1', '1.0')"
+SQL2="${INSERT1}"" values('groupname', 'subgroup',1,1,1,1,1,1,now(),'test1', '1.0')"
+SQL3="${INSERT2}"" values('groupname', 'subgroup',1,1,1,1,1,1,1,1,1,now(),3,'test1', '1.0')"
+SQL4="${INSERT2}"" values('groupname', 'subgroup',1,1,1,1,1,1,1,1,1,now(),4,'test1', '1.0')"
+SQL5="${INSERT1}"" values('groupname', 'subgroup',1,1,1,1,1,1,now(),'test2', '1.0')"
+SQL6="${INSERT1}"" values('groupname', 'subgroup',1,1,1,1,1,1,now(),'test2', '1.0')"
+
+run_sql() {
+  local user="${1}" password="${2}" schema="${3}" sql="${4}"
+  MYSQL="mysql -u${user} -p${password} -h ${SQL_HOST} ${schema}"
+  ${MYSQL} --execute "${sql}"
+  return $?
+}
+
+start_test() {
+  echo ""
+  echo "############################################################################################################"
+  echo ""
+  let TESTS=$TESTS+1
+  reportStatus=$(/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report | tail -2)
+  echo "Starting test $TESTS"
+  echo "$reportStatus"
+  START_VERSION=$(echo $reportStatus | cut -f13 -d' ')
+  PREVIOUS_SQL_EXECUTIONS=$(echo $reportStatus | cut -f1 -d' ')
+
+  if [ "${START_VERSION}" == "" ]; then
+    START_VERSION="0"
+    PREVIOUS_SQL_EXECUTIONS=0
+  fi
+}
+
+end_test() {
+  reportStatus=$(/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o report | tail -2)
+  echo "Ending test $TESTS"
+  echo "$reportStatus"
+  END_VERSION=$(echo $reportStatus | cut -f13 -d' ')
+  RECENT_SQL_EXECUTIONS=$(echo $reportStatus | cut -f1 -d' ')
+  END_STATUS=$(echo $reportStatus | cut -f7 -d' ')
+}
+
+check_results() {
+  local status="${1}" operation="${2}" startVer="${3}" endVer="${4}" newRecords="${5}" filesRan="${6}"
+
+  echo ""
+  echo "Test summary: status:$status, operation:$operation, from:$startVer, to:$endVer, new executions:$newRecords, sqlFiles:$filesRan"
+  # Convert to number
+  startVer=$(echo ${startVer} | awk '{$0=int($0)}1')
+  endVer=$(echo ${endVer} | awk '{$0=int($0)}1')
+
+  if [ ${startVer} -eq ${endVer} ] && [ $newRecords -eq $filesRan ] && [ $newRecords -eq 0 ]; then
+    TEST_MSG="No ${operation} required"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  elif [ $status -eq 1 ] && [ "${operation}" == "upgrade" ] && [ ${startVer} -le ${endVer} ] && [ $newRecords -eq $filesRan ]; then
+    TEST_MSG="Successful ${operation}"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  elif [ $status -eq 1 ] && [ "${operation}" == "downgrade" ] && [ ${startVer} -ge ${endVer} ] && [ $newRecords -eq $filesRan ]; then
+    TEST_MSG="Successful ${operation}"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  else
+    TEST_MSG="Errors occurred during ${operation}"
+    TEST_STATUS="FAIL"
+    let FAILED=$FAILED+1
+  fi
+  echo ""
+  echo "*** Test $TESTS: $TEST_STATUS , $TEST_MSG, current version: $END_VERSION ***"
+  echo ""
+}
+
+# Test 1 - Upgrade to Istanbul
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+start_test
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -t 0900
+end_test
+let TOTAL_COUNT=$HONOLULU_UPGRADE_COUNT+$ISTANBUL_UPGRADE_COUNT
+check_results $END_STATUS 'upgrade' "${START_VERSION}" "${END_VERSION}" $RECENT_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 2 - downgrade to 0800
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $ISTANBUL_DOWNGRADE_COUNT
+
+sleep 5
+
+# Test 3 - upgrade to 0900
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -f 0800 -t 0900
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results $END_STATUS 'upgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $ISTANBUL_UPGRADE_COUNT
+
+sleep 5
+
+# Test4 - run upgrade on db where tables already exist and migration schema is empty
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+run_sql "root" "${MYSQL_ROOT_PASSWORD}" "${SCHEMA}" "DROP DATABASE IF EXISTS migration;"
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -t 0900
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS
+check_results $END_STATUS 'upgrade' "0800" "${END_VERSION}" $NEW_SQL_EXECUTIONS $ISTANBUL_UPGRADE_COUNT
+
+sleep 5
+
+# Test5  - upgrade after failed downgrade
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "DROP table pdpstatistics;"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${PDPSTATISTICS2}"
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${IDX_TSIDX1}"
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -f 0800 -t 0900
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+# (files run before error * 2) + 1 to run the file again
+let TOTAL_COUNT=11
+check_results $END_STATUS 'upgrade' "0800" "0900" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test6 - Downgrade after failed downgrade
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "DROP table pdpstatistics;"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${PDPSTATISTICS2}"
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${IDX_TSIDX1}"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+# +1 to run the file again
+let TOTAL_COUNT=$ISTANBUL_DOWNGRADE_COUNT+1
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test7  - downgrade after failed upgrade
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "DROP table pdpstatistics;"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -f 0800 -t 0900
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${PDPSTATISTICS}"
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+# (files run before error * 2) + 1 to run the file again
+let TOTAL_COUNT=3
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 8 - Upgrade after failed upgrade
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "DROP table pdpstatistics;"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -f 0800 -t 0900
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${PDPSTATISTICS}"
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -t 0900
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+# +1 to run the file again
+let TOTAL_COUNT=$ISTANBUL_UPGRADE_COUNT+1
+check_results $END_STATUS 'upgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 9 - Upgrade when pdpstatistics contains data
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+start_test
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL1}"
+sleep 1
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL2}"
+sleep 1
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade -f 0800 -t 0900
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL3}"
+sleep 1
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL4}"
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+# +1 to run the file again
+let TOTAL_COUNT=$ISTANBUL_UPGRADE_COUNT
+check_results $END_STATUS 'upgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 10 - downgrade to 0800 with records in pdpstatistics
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL5}"
+sleep 1
+run_sql "${SQL_USER}" "${SQL_PASSWORD}" "${SCHEMA}" "${SQL6}"
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $ISTANBUL_DOWNGRADE_COUNT
+
+sleep 5
+
+# Test 11 - downgrade from 0800
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "${END_VERSION}" $NEW_SQL_EXECUTIONS $HONOLULU_DOWNGRADE_COUNT
+
+sleep 5
+
+# Test 12 - Full upgrade
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o upgrade
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+let TOTAL_COUNT=$HONOLULU_UPGRADE_COUNT+$ISTANBUL_UPGRADE_COUNT+$JAKARTA_UPGRADE_COUNT
+check_results $END_STATUS 'upgrade' "0" "${END_VERSION}" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 13 - Full downgrade
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator -s ${SQL_DB} -o downgrade -f 1000 -t 0
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+let TOTAL_COUNT=$HONOLULU_DOWNGRADE_COUNT+$ISTANBUL_DOWNGRADE_COUNT+$JAKARTA_DOWNGRADE_COUNT
+check_results $END_STATUS 'downgrade' "${START_VERSION}" "0" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+echo
+echo "-----------------------------------------------------------------------"
+echo "Number of Tests: $TESTS, Tests Passed: $PASSED, Tests Failed: $FAILED"
+echo "-----------------------------------------------------------------------"
+
+echo "End of test $(date +%F-%T)"
+
+nc -lk -p 6824
+
+exit 0
diff --git a/policy-db-migrator/smoke-test/postgres-tests.sh b/policy-db-migrator/smoke-test/postgres-tests.sh
new file mode 100755
index 0000000..be38a5d
--- /dev/null
+++ b/policy-db-migrator/smoke-test/postgres-tests.sh
@@ -0,0 +1,195 @@
+#!/bin/sh
+# ============LICENSE_START====================================================
+#  Copyright (C) 2022 Nordix Foundation.
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END======================================================
+# shellcheck disable=SC2039
+# shellcheck disable=SC2086
+# shellcheck disable=SC2012
+
+echo "Start of test $(date +%F-%T)"
+
+export POLICY_HOME=/opt/app/policy
+export SQL_USER=policy_user
+export SQL_HOST=postgres
+export SQL_PASSWORD=policy_user
+export SCHEMA=policyadmin
+export POSTGRES_PASSWORD=secret
+export SCRIPT_DIRECTORY=postgres
+
+# Test variables
+TOTAL_COUNT=0
+HONOLULU_COUNT=96
+ISTANBUL_COUNT=13
+JAKARTA_COUNT=9
+
+NEW_SQL_EXECUTIONS=0
+PREVIOUS_SQL_EXECUTIONS=0
+RECENT_SQL_EXECUTIONS=0
+TEST_STATUS="FAIL"
+TEST_MSG=""
+TESTS=0
+PASSED=0
+FAILED=0
+
+run_sql() {
+  local user="${1}" schema="${2}" sql="${3}"
+  PGSQL="psql -U ${user} -d ${schema} -h ${SQL_HOST}"
+  ${PGSQL} --command "${sql}"
+  return $?
+}
+
+start_test() {
+  echo ""
+  echo "############################################################################################################"
+  echo ""
+  let TESTS=$TESTS+1
+  echo "Starting test $TESTS"
+  PREVIOUS_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS
+}
+
+end_test() {
+  echo "Ending test $TESTS"
+  reportStatus=$(/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o report | tail -3)
+  echo "Status: $reportStatus"
+  RECENT_SQL_EXECUTIONS=$(echo $reportStatus | cut -f1 -d' ' | sed 's/(//')
+}
+
+check_results() {
+  local operation="${1}" startVer="${2}" endVer="${3}" newRecords="${4}" filesRan="${5}"
+
+  echo ""
+  echo "Test summary: operation:$operation, from:$startVer, to:$endVer, new executions:$newRecords, sqlFiles:$filesRan"
+  # Convert to number
+  startVer=$(echo ${startVer} | awk '{$0=int($0)}1')
+  endVer=$(echo ${endVer} | awk '{$0=int($0)}1')
+
+  if [ ${startVer} -eq ${endVer} ] && [ $newRecords -eq $filesRan ] && [ $newRecords -eq 0 ]; then
+    TEST_MSG="No ${operation} required"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  elif [ "${operation}" == "upgrade" ] && [ ${startVer} -le ${endVer} ] && [ $newRecords -eq $filesRan ]; then
+    TEST_MSG="Successful ${operation}"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  elif [ "${operation}" == "downgrade" ] && [ ${startVer} -ge ${endVer} ] && [ $newRecords -eq $filesRan ]; then
+    TEST_MSG="Successful ${operation}"
+    TEST_STATUS="PASS"
+    let PASSED=$PASSED+1
+  else
+    TEST_MSG="Errors occurred during ${operation}"
+    TEST_STATUS="FAIL"
+    let FAILED=$FAILED+1
+  fi
+  echo ""
+  echo "*** Test $TESTS: $TEST_STATUS , $TEST_MSG, current version: $END_VERSION ***"
+  echo ""
+}
+
+# Test 1 - Upgrade to Istanbul
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o upgrade -t 0900
+end_test
+let TOTAL_COUNT=$HONOLULU_COUNT+$ISTANBUL_COUNT
+check_results 'upgrade' "0" "0900" $RECENT_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 2 - downgrade to 0800
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results 'downgrade' "0900" "0800" $NEW_SQL_EXECUTIONS $ISTANBUL_COUNT
+
+sleep 5
+
+# Test 3 - upgrade to 1000
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o upgrade -f 0800 -t 1000
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+let TOTAL_COUNT=$ISTANBUL_COUNT+$JAKARTA_COUNT
+check_results 'upgrade' "0800" "1000" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test4 - run upgrade on db where tables already exist and migration schema is empty
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o downgrade -t 0800
+run_sql "postgres" "postgres" "DROP DATABASE IF EXISTS migration;"
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o upgrade -t 0900
+end_test
+check_results 'upgrade' "0800" "0900" $RECENT_SQL_EXECUTIONS $ISTANBUL_COUNT
+
+sleep 5
+
+# Test5 - downgrade
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o downgrade -f 0900 -t 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results 'downgrade' "0900" "0800" $NEW_SQL_EXECUTIONS $ISTANBUL_COUNT
+
+sleep 5
+
+
+# Test 6 - downgrade from 0800
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o downgrade -f 0800
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+check_results 'downgrade' "0800" "0" $NEW_SQL_EXECUTIONS $HONOLULU_COUNT
+
+sleep 5
+
+# Test 7 - Full upgrade
+start_test
+/opt/app/policy/bin/prepare_upgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o upgrade
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+let TOTAL_COUNT=$HONOLULU_COUNT+$ISTANBUL_COUNT+$JAKARTA_COUNT
+check_results 'upgrade' "0" "1000" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+sleep 5
+
+# Test 13 - Full downgrade
+start_test
+/opt/app/policy/bin/prepare_downgrade.sh ${SQL_DB}
+/opt/app/policy/bin/db-migrator-pg -s ${SQL_DB} -o downgrade -f 1000 -t 0
+end_test
+let NEW_SQL_EXECUTIONS=$RECENT_SQL_EXECUTIONS-$PREVIOUS_SQL_EXECUTIONS
+let TOTAL_COUNT=$HONOLULU_COUNT+$ISTANBUL_COUNT+$JAKARTA_COUNT
+check_results 'downgrade' "1000" "0" $NEW_SQL_EXECUTIONS $TOTAL_COUNT
+
+echo
+echo "-----------------------------------------------------------------------"
+echo "Number of Tests: $TESTS, Tests Passed: $PASSED, Tests Failed: $FAILED"
+echo "-----------------------------------------------------------------------"
+
+echo "End of test $(date +%F-%T)"
+
+nc -lk -p 6824
+
+exit 0
diff --git a/policy-db-migrator/smoke-test/readme.md b/policy-db-migrator/smoke-test/readme.md
new file mode 100644
index 0000000..5a00de1
--- /dev/null
+++ b/policy-db-migrator/smoke-test/readme.md
@@ -0,0 +1,9 @@
+# DB Migrator Smoke test
+CSIT docker compose for db-migrator can be used for this or any other docker compose.
+
+- Check if `mariadb-tests.sh` and `postgres-test.sh` have the correct variables.
+- Add any extras tests necessary for the test.
+- Change the `db_migrator_policy_init.sh` on db-migrator docker to the `*-test.sh` file.
+- Run docker compose
+- Collect logs with `docker-compose logs > results.txt`
+- Tear down compose. Repeat process if necessary.
\ No newline at end of file
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/0900/downgrade/0140-pk_pdpstatistics.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/0900/downgrade/0140-pk_pdpstatistics.sql
index 6b87eef..078270c 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/0900/downgrade/0140-pk_pdpstatistics.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/0900/downgrade/0140-pk_pdpstatistics.sql
@@ -17,6 +17,6 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE pdpstatistics DROP CONSTRAINT PRIMARY KEY;
+ALTER TABLE pdpstatistics DROP CONSTRAINT PK_PDPSTATISTICS;
 
 UPDATE pdpstatistics set ID = 0;
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0150-toscaproperty.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0150-toscaproperty.sql
index e1abf28..1db3a62 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0150-toscaproperty.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0150-toscaproperty.sql
@@ -19,4 +19,4 @@
 
 CREATE TABLE IF NOT EXISTS jpatoscaproperty_constraints (parentLocalName VARCHAR(120) NULL, localName VARCHAR(120) NULL, parentKeyVersion VARCHAR(15) NULL, parentKeyName VARCHAR(120) NULL, CONSTRAINTS VARCHAR(255) NULL);
 CREATE TABLE IF NOT EXISTS jpatoscaproperty_metadata (parentLocalName VARCHAR(120) NULL, localName VARCHAR(120) NULL, parentKeyVersion VARCHAR(15) NULL, parentKeyName VARCHAR(120) NULL, METADATA VARCHAR(255) NULL, METADATA_KEY VARCHAR(255) NULL);
-CREATE TABLE IF NOT EXISTS toscaproperty (DEFAULTVALUE VARCHAR(255) NULL, DESCRIPTION VARCHAR(255) NULL, ENTRYSCHEMA BYTEA DEFAULT NULL NULL, REQUIRED BIT DEFAULT 0 NULL, STATUS INT DEFAULT NULL NULL, parentLocalName VARCHAR(120) NOT NULL, localName VARCHAR(120) NOT NULL, parentKeyVersion VARCHAR(15) NOT NULL, parentKeyName VARCHAR(120) NOT NULL, name VARCHAR(120) NULL, version VARCHAR(20) NULL, CONSTRAINT PK_TOSCAPROPERTY PRIMARY KEY (parentLocalName, localName, parentKeyVersion, parentKeyName));
+CREATE TABLE IF NOT EXISTS toscaproperty (DEFAULTVALUE VARCHAR(255) NULL, DESCRIPTION VARCHAR(255) NULL, ENTRYSCHEMA BYTEA DEFAULT NULL NULL, REQUIRED BIT DEFAULT 0::bit NULL, STATUS INT DEFAULT NULL NULL, parentLocalName VARCHAR(120) NOT NULL, localName VARCHAR(120) NOT NULL, parentKeyVersion VARCHAR(15) NOT NULL, parentKeyName VARCHAR(120) NOT NULL, name VARCHAR(120) NULL, version VARCHAR(20) NULL, CONSTRAINT PK_TOSCAPROPERTY PRIMARY KEY (parentLocalName, localName, parentKeyVersion, parentKeyName));
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0160-jpapolicyaudit_pk.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0160-jpapolicyaudit_pk.sql
index 3a3d3ea..65b0dc4 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0160-jpapolicyaudit_pk.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0160-jpapolicyaudit_pk.sql
@@ -1,6 +1,7 @@
 /*
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2022 Bell Canada. All rights reserved.
+ *  Modifications Copyright (C) 2022 Nordix Foundation.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -17,5 +18,5 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE jpapolicyaudit DROP CONSTRAINT PRIMARY KEY;
+ALTER TABLE jpapolicyaudit DROP CONSTRAINT PK_JPAPOLICYAUDIT;
 ALTER TABLE jpapolicyaudit ADD CONSTRAINT PK_JPAPOLICYAUDIT PRIMARY KEY (ID, name, version);
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0170-pdpstatistics_pk.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0170-pdpstatistics_pk.sql
index 08065e4..29c24f0 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0170-pdpstatistics_pk.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0170-pdpstatistics_pk.sql
@@ -1,6 +1,7 @@
 /*
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2022 Bell Canada. All rights reserved.
+ *  Modifications Copyright (C) 2022 Nordix Foundation.
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -17,5 +18,5 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE pdpstatistics DROP CONSTRAINT PRIMARY KEY;
+ALTER TABLE pdpstatistics DROP CONSTRAINT PK_PDPSTATISTICS;
 ALTER TABLE pdpstatistics ADD CONSTRAINT PK_PDPSTATISTICS PRIMARY KEY (ID, name, version);
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
index 3ea7f9b..e8e7cad 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
@@ -17,4 +17,4 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE jpatoscanodetemplate_metadata modify METADATA VARCHAR;
\ No newline at end of file
+ALTER TABLE jpatoscanodetemplate_metadata ALTER COLUMN METADATA TYPE VARCHAR(255);
\ No newline at end of file
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
index 9c4a118..1d91fcb 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/postgres/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
@@ -17,4 +17,4 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE jpatoscanodetemplate_metadata modify METADATA LONGTEXT;
\ No newline at end of file
+ALTER TABLE jpatoscanodetemplate_metadata ALTER COLUMN METADATA TYPE TEXT;
\ No newline at end of file
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql b/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
index 3ea7f9b..0aafd38 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/downgrade/0180-jpatoscanodetemplate_metadata.sql
@@ -17,4 +17,4 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE jpatoscanodetemplate_metadata modify METADATA VARCHAR;
\ No newline at end of file
+ALTER TABLE jpatoscanodetemplate_metadata MODIFY COLUMN METADATA VARCHAR(255);
\ No newline at end of file
diff --git a/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql b/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
index 9c4a118..426613d 100644
--- a/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
+++ b/policy-db-migrator/src/main/docker/config/policyadmin/sql/1000/upgrade/0180-jpatoscanodetemplate_metadata.sql
@@ -17,4 +17,4 @@
  *  ============LICENSE_END=========================================================
  */
 
-ALTER TABLE jpatoscanodetemplate_metadata modify METADATA LONGTEXT;
\ No newline at end of file
+ALTER TABLE jpatoscanodetemplate_metadata MODIFY COLUMN METADATA LONGTEXT;
\ No newline at end of file
diff --git a/policy-db-migrator/src/main/docker/db-migrator b/policy-db-migrator/src/main/docker/db-migrator
index 785dd83..565ff1c 100755
--- a/policy-db-migrator/src/main/docker/db-migrator
+++ b/policy-db-migrator/src/main/docker/db-migrator
@@ -4,7 +4,7 @@
 # ONAP
 # ================================================================================
 # Copyright (C) 2017-2021 AT&T Intellectual Property. All rights reserved.
-# Modifications Copyright (C) 2021 Nordix Foundation.
+# Modifications Copyright (C) 2021-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -102,8 +102,7 @@
 # current_schema
 #####################################################
 
-function current_schema
-{
+function current_schema() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- current_schema --"
         set -x
@@ -125,8 +124,7 @@
 # ensure global metadata
 #####################################################
 
-function ensure_metadata
-{
+function ensure_metadata() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- ensure_metadata --"
         set -x
@@ -148,13 +146,11 @@
     return $?
 }
 
-
 #####################################################
 # ensure metadata on a per schema basis
 #####################################################
 
-function ensure_metadata_schema
-{
+function ensure_metadata_schema() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- ensure_metadata_schema --"
         set -x
@@ -178,13 +174,11 @@
     return $?
 }
 
-
 #####################################################
 # target_release
 #####################################################
 
-function target_release
-{
+function target_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- target_release --"
         set -x
@@ -195,7 +189,7 @@
     TARGET_UPGRADE_RELEASE=${ZERO_VERSION}
     TARGET_DOWNGRADE_RELEASE=${ZERO_VERSION}
 
-    upgradeSqls=$(ls -v -r "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+    upgradeSqls=$(ls -v -r "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
     for sql in ${upgradeSqls}; do
         TARGET_UPGRADE_RELEASE="$(basename $(dirname $(dirname $sql)))"
         break
@@ -209,8 +203,7 @@
 # is_upgrade
 #####################################################
 
-function is_upgrade
-{
+function is_upgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- is_upgrade --"
         set -x
@@ -218,7 +211,7 @@
 
     local upgradeSqls
 
-    upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+    upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
     if [ -z "${upgradeSqls}" ]; then
         return 1
     else
@@ -226,13 +219,11 @@
     fi
 }
 
-
 #####################################################
 # is_downgrade
 #####################################################
 
-function is_downgrade
-{
+function is_downgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- is_downgrade --"
         set -x
@@ -240,7 +231,7 @@
 
     local downgradeSqls
 
-    downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2> /dev/null)
+    downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2>/dev/null)
     if [ -z "${downgradeSqls}" ]; then
         return 1
     else
@@ -248,35 +239,32 @@
     fi
 }
 
-
 #####################################################
 # set_current_release
 #####################################################
 
-function set_current_release
-{
-        if [ "${DEBUG}" = "y" ]; then
-                echo "-- set_current_release --"
-                set -x
-        fi
+function set_current_release() {
+    if [ "${DEBUG}" = "y" ]; then
+        echo "-- set_current_release --"
+        set -x
+    fi
 
-        CURRENT_RELEASE="${1}"
+    CURRENT_RELEASE="${1}"
 
-        local sql
-        sql="INSERT INTO ${METADATA_TABLE} (name, version) "
-        sql=${sql}"VALUES('${SCHEMA}', '${CURRENT_RELEASE}') "
-        sql=${sql}"ON DUPLICATE KEY UPDATE version='${CURRENT_RELEASE}';"
+    local sql
+    sql="INSERT INTO ${METADATA_TABLE} (name, version) "
+    sql=${sql}"VALUES('${SCHEMA}', '${CURRENT_RELEASE}') "
+    sql=${sql}"ON DUPLICATE KEY UPDATE version='${CURRENT_RELEASE}';"
 
-        ${MYSQL} --execute "${sql}"
-        return $?
+    ${MYSQL} --execute "${sql}"
+    return $?
 }
 
 #####################################################
 # current_release
 #####################################################
 
-function current_release
-{
+function current_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- current_release --"
         set -x
@@ -298,8 +286,7 @@
 # previous_release
 #####################################################
 
-function previous_release
-{
+function previous_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- previous_release --"
         set -x
@@ -308,28 +295,26 @@
     local current_release_int_val previous_release_int_val previous_release
 
     if [ $current_release == $ZERO_VERSION ] || [ $current_release == $BASE_VERSION ]; then
-         PREVIOUS_RELEASE=$ZERO_VERSION
+        PREVIOUS_RELEASE=$ZERO_VERSION
     else
-         current_release_int_val=$(echo $current_release  | awk '{$0=int($0)}1')
-         let previous_release_int_val=$current_release_int_val-100
-         if [ $previous_release_int_val -lt 1000 ]; then
-                 previous_release="0"$previous_release_int_val
-         else
-                 previous_release=$previous_release_int_val
-         fi
-         PREVIOUS_RELEASE=$previous_release
+        current_release_int_val=$(echo $current_release | awk '{$0=int($0)}1')
+        let previous_release_int_val=$current_release_int_val-100
+        if [ $previous_release_int_val -lt 1000 ]; then
+            previous_release="0"$previous_release_int_val
+        else
+            previous_release=$previous_release_int_val
+        fi
+        PREVIOUS_RELEASE=$previous_release
     fi
 
     return 0
 }
 
-
 #####################################################
 # last_operation_status
 #####################################################
 
-function last_operation_status
-{
+function last_operation_status() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- last_operation_status --"
         set -x
@@ -355,15 +340,14 @@
         rc=1
     fi
 
-    return $rc;
+    return $rc
 }
 
 #####################################################
 # execute sql script history
 #####################################################
 
-function track_script
-{
+function track_script() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- track_script $* --"
         set -x
@@ -371,7 +355,7 @@
 
     local script="${1}" operation="${2}" success="${3}" from_version="${4}" to_version="${5}" tag="${6}"
     if [ $operation == "downgrade" ]; then
-       to_version=${TARGET_DOWNGRADE_RELEASE}
+        to_version=${TARGET_DOWNGRADE_RELEASE}
     fi
 
     local sql="INSERT INTO ${METADATA_HISTORY}(script,operation,from_version,to_version,tag,success,atTime) "
@@ -381,13 +365,11 @@
     return $?
 }
 
-
 #####################################################
 # execute sql script
 #####################################################
 
-function run_script
-{
+function run_script() {
     if [ "${DEBUG}" == "y" ]; then
         echo "-- run_script $* --"
         set -x
@@ -398,7 +380,7 @@
     echo
     echo "> ${operation} ${script}"
 
-    ${MYSQL} ${SCHEMA} --verbose < "${scriptPath}"
+    ${MYSQL} ${SCHEMA} --verbose <"${scriptPath}"
     local rc=$?
     if [ ${rc} -ne 0 ]; then
         success="0"
@@ -415,8 +397,7 @@
 # upgrade
 #####################################################
 
-function upgrade
-{
+function upgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- upgrade --"
         set -x
@@ -428,20 +409,20 @@
     echo "upgrade: ${CURRENT_RELEASE} -> ${TARGET_UPGRADE_RELEASE}"
 
     if [ ${CURRENT_RELEASE} \< ${TARGET_UPGRADE_RELEASE} ]; then
-        upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+        upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
         for sqlFile in ${upgradeSqls}; do
             sqlName=$(basename "${sqlFile}")
             schemaVersion="$(basename $(dirname $(dirname $sqlFile)))"
             previous_release $schemaVersion
-            if [ "${schemaVersion}" -gt "${CURRENT_RELEASE}" ] && \
+            if [ "${schemaVersion}" -gt "${CURRENT_RELEASE}" ] &&
                 [ "${schemaVersion}" -le "${TARGET_UPGRADE_RELEASE}" ]; then
                 tag=${tagDate}"${schemaVersion}u"
-                if [ $RETRY -eq 1 ] && \
+                if [ $RETRY -eq 1 ] &&
                     # Compare the numeric portion of the filename because shell doesn't support string comparison
-                    [ $(echo ${sqlName}| awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT}| awk -F- '{print $1}') ]; then
-                     rc=1
+                    [ $(echo ${sqlName} | awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT} | awk -F- '{print $1}') ]; then
+                    rc=1
                 else
-                     rc=0
+                    rc=0
                 fi
                 if [ ${rc} -eq 0 ]; then
                     run_script "upgrade" "${sqlName}" "${sqlFile}" "${PREVIOUS_RELEASE}" "${schemaVersion}" "${tag}"
@@ -465,8 +446,7 @@
 # downgrade
 #####################################################
 
-function downgrade
-{
+function downgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- downgrade --"
         set -x
@@ -478,19 +458,19 @@
     echo "downgrade: ${CURRENT_RELEASE} -> ${TARGET_DOWNGRADE_RELEASE}"
 
     if [ ${CURRENT_RELEASE} \> ${TARGET_DOWNGRADE_RELEASE} ]; then
-        downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2> /dev/null)
+        downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2>/dev/null)
         for sqlFile in ${downgradeSqls}; do
             sqlName=$(basename "${sqlFile}")
             schemaVersion="$(basename $(dirname $(dirname $sqlFile)))"
-            if [ "${schemaVersion}" -le "${CURRENT_RELEASE}" ] && \
+            if [ "${schemaVersion}" -le "${CURRENT_RELEASE}" ] &&
                 [ "${schemaVersion}" -gt "${TARGET_DOWNGRADE_RELEASE}" ]; then
                 tag=${tagDate}"${schemaVersion}d"
-                if [ $RETRY -eq 1 ] && \
+                if [ $RETRY -eq 1 ] &&
                     # Compare the numeric portion of the filename because shell doesn't support string comparison
-                    [ $(echo ${sqlName}| awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT}| awk -F- '{print $1}') ]; then
-                     rc=1
+                    [ $(echo ${sqlName} | awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT} | awk -F- '{print $1}') ]; then
+                    rc=1
                 else
-                     rc=0
+                    rc=0
                 fi
                 if [ ${rc} -eq 0 ]; then
                     run_script "downgrade" "${sqlName}" "${sqlFile}" "${schemaVersion}" "${PREVIOUS_RELEASE}" ${tag}
@@ -514,8 +494,7 @@
 # erase
 #####################################################
 
-function erase
-{
+function erase() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- erase --"
         set -x
@@ -527,7 +506,7 @@
     local deleteHistory="DELETE FROM ${METADATA_HISTORY};"
     ${MYSQL} --execute "${deleteHistory}"
 
-    local dropDB="DROP DATABASE IF EXISTS ${SCHEMA_DB}";
+    local dropDB="DROP DATABASE IF EXISTS ${SCHEMA_DB}"
     ${MYSQL} --execute "${dropDB}"
 }
 
@@ -535,8 +514,7 @@
 # report
 #####################################################
 
-function report
-{
+function report() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- report --"
         set -x
@@ -551,8 +529,7 @@
     okay
 }
 
-function okay
-{
+function okay() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- okay --"
         set -x
@@ -588,40 +565,47 @@
 fi
 until [ -z "$1" ]; do
     case $1 in
-        -s|--schema|--database)    shift
-             SCHEMA=$1
-             ;;
-        -b|--basedir)   shift
-             MIGRATION_DIR=$1
-             ;;
-        -t|--target)    shift
-             INPUT_TARGET_RELEASE=$1
-             ;;
-        -f|--from)      shift
-             INPUT_FROM_RELEASE=$1
-             ;;
-        -o|--operation) shift
-             OPERATION=$1
-             ;;
-        *)              usage
-             exit 1
-             ;;
+    -s | --schema | --database)
+        shift
+        SCHEMA=$1
+        ;;
+    -b | --basedir)
+        shift
+        MIGRATION_DIR=$1
+        ;;
+    -t | --target)
+        shift
+        INPUT_TARGET_RELEASE=$1
+        ;;
+    -f | --from)
+        shift
+        INPUT_FROM_RELEASE=$1
+        ;;
+    -o | --operation)
+        shift
+        OPERATION=$1
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
     esac
     shift
 done
 
 case ${OPERATION} in
-    upgrade)    ;;
-    downgrade)  ;;
-    auto)       ;;
-    version)    ;;
-    erase)      ;;
-    report)     ;;
-    ok)         ;;
-    *)          echo "error: invalid operation provided"
-                usage
-                exit 1
-                ;;
+upgrade) ;;
+downgrade) ;;
+auto) ;;
+version) ;;
+erase) ;;
+report) ;;
+ok) ;;
+*)
+    echo "error: invalid operation provided"
+    usage
+    exit 1
+    ;;
 esac
 
 if [ -z "${SCHEMA}" ]; then
@@ -637,8 +621,8 @@
     exit 4
 fi
 
-MYSQL="mysql -u${SQL_USER} -p${SQL_PASSWORD} -h ${SQL_HOST}";
-if ! ${MYSQL} -h"${SQL_HOST}" --execute "show databases;" > /dev/null 2>&1; then
+MYSQL="mysql -u${SQL_USER} -p${SQL_PASSWORD} -h ${SQL_HOST}"
+if ! ${MYSQL} -h"${SQL_HOST}" --execute "show databases;" >/dev/null 2>&1; then
     echo "error: No DB connectivity to ${SQL_HOST} for ${SQL_USER}"
     exit 5
 fi
@@ -647,7 +631,7 @@
     SCHEMA="*"
 fi
 
-SCHEMA_S=$(ls -d "${MIGRATION_DIR}"/${SCHEMA}/ 2> /dev/null)
+SCHEMA_S=$(ls -d "${MIGRATION_DIR}"/${SCHEMA}/ 2>/dev/null)
 if [ -z "${SCHEMA_S}" ]; then
     echo "error: no databases available"
     exit 0
@@ -668,7 +652,7 @@
     TARGET_RELEASE=${INPUT_TARGET_RELEASE}
 
     if is_upgrade && is_downgrade; then
-        echo "${SCHEMA}: failure: invalid configuration: ${UPGRADE_SQL_SUFFIX} and "\
+        echo "${SCHEMA}: failure: invalid configuration: ${UPGRADE_SQL_SUFFIX} and " \
             "${DOWNGRADE_SQL_SUFFIX} exist under ${DOWNGRADE_DIR}"
         rc=1
         continue
@@ -714,29 +698,29 @@
     last_operation_status
     last_status=$?
     if [ $last_status -eq 0 ]; then
-         echo "Partial $LAST_OPERATION detected"
-         RETRY=1
-         if [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'downgrade' ]; then
-              CURRENT_RELEASE="${LAST_FROM_VERSION}"
-              # greater than
-              COMPARE="gt"
-              echo "Downgrade will attempt to resume at $LAST_SCRIPT"
-         elif [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
-              CURRENT_RELEASE="${LAST_TO_VERSION}"
-              # greater than or equal to
-              COMPARE="ge"
-              echo "Downgrade will attempt to resume before $LAST_SCRIPT"
-         elif [ "${OPERATION}" == 'upgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
-              CURRENT_RELEASE="${LAST_FROM_VERSION}"
-              # less than
-              COMPARE="lt"
-              echo "Upgrade will attempt to resume at $LAST_SCRIPT"
-         else
-              CURRENT_RELEASE="${LAST_TO_VERSION}"
-              # less than or equal
-              COMPARE="le"
-              echo "Upgrade will attempt to resume after $LAST_SCRIPT"
-         fi
+        echo "Partial $LAST_OPERATION detected"
+        RETRY=1
+        if [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'downgrade' ]; then
+            CURRENT_RELEASE="${LAST_FROM_VERSION}"
+            # greater than
+            COMPARE="gt"
+            echo "Downgrade will attempt to resume at $LAST_SCRIPT"
+        elif [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
+            CURRENT_RELEASE="${LAST_TO_VERSION}"
+            # greater than or equal to
+            COMPARE="ge"
+            echo "Downgrade will attempt to resume before $LAST_SCRIPT"
+        elif [ "${OPERATION}" == 'upgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
+            CURRENT_RELEASE="${LAST_FROM_VERSION}"
+            # less than
+            COMPARE="lt"
+            echo "Upgrade will attempt to resume at $LAST_SCRIPT"
+        else
+            CURRENT_RELEASE="${LAST_TO_VERSION}"
+            # less than or equal
+            COMPARE="le"
+            echo "Upgrade will attempt to resume after $LAST_SCRIPT"
+        fi
     fi
 
     if [ -n "${INPUT_FROM_RELEASE}" ]; then
@@ -749,29 +733,35 @@
     fi
 
     case ${OPERATION} in
-        upgrade)     if upgrade; then
-                         echo "${SCHEMA}: OK: upgrade (${CURRENT_RELEASE})"
-                     else
-                         rc=1
-                         echo "${SCHEMA}: failure: upgrade to release ${TARGET_UPGRADE_RELEASE} (${CURRENT_RELEASE})"
-                     fi
-                     ;;
-        downgrade)   if downgrade; then
-                         echo "${SCHEMA}: OK: downgrade (${CURRENT_RELEASE})"
-                     else
-                        rc=1
-                        echo "${SCHEMA}: failure: downgrade to release ${TARGET_DOWNGRADE_RELEASE} (${CURRENT_RELEASE})"
-                     fi
-                     ;;
-        version)     echo "${SCHEMA}: ${CURRENT_RELEASE}"
-                     ;;
-        erase)       erase
-                     ;;
-        report)      report
-                     ;;
-        ok)          okay
-                     ;;
-        esac
+    upgrade)
+        if upgrade; then
+            echo "${SCHEMA}: OK: upgrade (${CURRENT_RELEASE})"
+        else
+            rc=1
+            echo "${SCHEMA}: failure: upgrade to release ${TARGET_UPGRADE_RELEASE} (${CURRENT_RELEASE})"
+        fi
+        ;;
+    downgrade)
+        if downgrade; then
+            echo "${SCHEMA}: OK: downgrade (${CURRENT_RELEASE})"
+        else
+            rc=1
+            echo "${SCHEMA}: failure: downgrade to release ${TARGET_DOWNGRADE_RELEASE} (${CURRENT_RELEASE})"
+        fi
+        ;;
+    version)
+        echo "${SCHEMA}: ${CURRENT_RELEASE}"
+        ;;
+    erase)
+        erase
+        ;;
+    report)
+        report
+        ;;
+    ok)
+        okay
+        ;;
+    esac
 
 done
 exit $rc
diff --git a/policy-db-migrator/src/main/docker/db-migrator-pg b/policy-db-migrator/src/main/docker/db-migrator-pg
index a0ca226..607a86f 100755
--- a/policy-db-migrator/src/main/docker/db-migrator-pg
+++ b/policy-db-migrator/src/main/docker/db-migrator-pg
@@ -101,8 +101,7 @@
 # current_schema
 #####################################################
 
-function current_schema
-{
+function current_schema() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- current_schema --"
         set -x
@@ -125,8 +124,7 @@
 # ensure global metadata
 #####################################################
 
-function ensure_metadata
-{
+function ensure_metadata() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- ensure_metadata --"
         set -x
@@ -149,13 +147,11 @@
     return $?
 }
 
-
 #####################################################
 # ensure metadata on a per schema basis
 #####################################################
 
-function ensure_metadata_schema
-{
+function ensure_metadata_schema() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- ensure_metadata_schema --"
         set -x
@@ -179,13 +175,11 @@
     return $?
 }
 
-
 #####################################################
 # target_release
 #####################################################
 
-function target_release
-{
+function target_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- target_release --"
         set -x
@@ -196,7 +190,7 @@
     TARGET_UPGRADE_RELEASE=${ZERO_VERSION}
     TARGET_DOWNGRADE_RELEASE=${ZERO_VERSION}
 
-    upgradeSqls=$(ls -v -r "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+    upgradeSqls=$(ls -v -r "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
     for sql in ${upgradeSqls}; do
         TARGET_UPGRADE_RELEASE="$(basename $(dirname $(dirname $sql)))"
         break
@@ -210,8 +204,7 @@
 # is_upgrade
 #####################################################
 
-function is_upgrade
-{
+function is_upgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- is_upgrade --"
         set -x
@@ -219,7 +212,7 @@
 
     local upgradeSqls
 
-    upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+    upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
     if [ -z "${upgradeSqls}" ]; then
         return 1
     else
@@ -227,13 +220,11 @@
     fi
 }
 
-
 #####################################################
 # is_downgrade
 #####################################################
 
-function is_downgrade
-{
+function is_downgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- is_downgrade --"
         set -x
@@ -241,7 +232,7 @@
 
     local downgradeSqls
 
-    downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2> /dev/null)
+    downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2>/dev/null)
     if [ -z "${downgradeSqls}" ]; then
         return 1
     else
@@ -249,36 +240,33 @@
     fi
 }
 
-
 #####################################################
 # set_current_release
 #####################################################
 
-function set_current_release
-{
-        if [ "${DEBUG}" = "y" ]; then
-                echo "-- set_current_release --"
-                set -x
-        fi
+function set_current_release() {
+    if [ "${DEBUG}" = "y" ]; then
+        echo "-- set_current_release --"
+        set -x
+    fi
 
-        CURRENT_RELEASE="${1}"
+    CURRENT_RELEASE="${1}"
 
-        local sql
-        sql="INSERT INTO ${METADATA_TABLE} (name, version) "
-        sql=${sql}"VALUES('${SCHEMA}', '${CURRENT_RELEASE}') "
-        sql=${sql}"ON CONFLICT (name) DO UPDATE SET version='${CURRENT_RELEASE}';"
+    local sql
+    sql="INSERT INTO ${METADATA_TABLE} (name, version) "
+    sql=${sql}"VALUES('${SCHEMA}', '${CURRENT_RELEASE}') "
+    sql=${sql}"ON CONFLICT (name) DO UPDATE SET version='${CURRENT_RELEASE}';"
 
-        PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${METADATA_DB}";
-        ${PSQL} --command "${sql}"
-        return $?
+    PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${METADATA_DB}"
+    ${PSQL} --command "${sql}"
+    return $?
 }
 
 #####################################################
 # current_release
 #####################################################
 
-function current_release
-{
+function current_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- current_release --"
         set -x
@@ -302,8 +290,7 @@
 # previous_release
 #####################################################
 
-function previous_release
-{
+function previous_release() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- previous_release --"
         set -x
@@ -312,28 +299,26 @@
     local current_release_int_val previous_release_int_val previous_release
 
     if [ $current_release == $ZERO_VERSION ] || [ $current_release == $BASE_VERSION ]; then
-         PREVIOUS_RELEASE=$ZERO_VERSION
+        PREVIOUS_RELEASE=$ZERO_VERSION
     else
-         current_release_int_val=$(echo $current_release  | awk '{$0=int($0)}1')
-         let previous_release_int_val=$current_release_int_val-100
-         if [ $previous_release_int_val -lt 1000 ]; then
-                 previous_release="0"$previous_release_int_val
-         else
-                 previous_release=$previous_release_int_val
-         fi
-         PREVIOUS_RELEASE=$previous_release
+        current_release_int_val=$(echo $current_release | awk '{$0=int($0)}1')
+        let previous_release_int_val=$current_release_int_val-100
+        if [ $previous_release_int_val -lt 1000 ]; then
+            previous_release="0"$previous_release_int_val
+        else
+            previous_release=$previous_release_int_val
+        fi
+        PREVIOUS_RELEASE=$previous_release
     fi
 
     return 0
 }
 
-
 #####################################################
 # last_operation_status
 #####################################################
 
-function last_operation_status
-{
+function last_operation_status() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- last_operation_status --"
         set -x
@@ -360,15 +345,14 @@
         rc=1
     fi
 
-    return $rc;
+    return $rc
 }
 
 #####################################################
 # execute sql script history
 #####################################################
 
-function track_script
-{
+function track_script() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- track_script $* --"
         set -x
@@ -376,24 +360,22 @@
 
     local script="${1}" operation="${2}" success="${3}" from_version="${4}" to_version="${5}" tag="${6}"
     if [ $operation == "downgrade" ]; then
-       to_version=${TARGET_DOWNGRADE_RELEASE}
+        to_version=${TARGET_DOWNGRADE_RELEASE}
     fi
 
     local sql="INSERT INTO ${METADATA_HISTORY}(script,operation,from_version,to_version,tag,success,atTime) "
     sql=${sql}"VALUES ('${script}','${operation}','${from_version}','${to_version}','${tag}','${success}',now()) "
 
-    PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${METADATA_DB}";
+    PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${METADATA_DB}"
     ${PSQL} --command "${sql}"
     return $?
 }
 
-
 #####################################################
 # execute sql script
 #####################################################
 
-function run_script
-{
+function run_script() {
     if [ "${DEBUG}" == "y" ]; then
         echo "-- run_script $* --"
         set -x
@@ -405,7 +387,7 @@
     echo "> ${operation} ${script}"
 
     PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${SQL_DB}"
-    ${PSQL} ${SCHEMA} < "${scriptPath}"
+    ${PSQL} <"${scriptPath}"
     local rc=$?
     if [ ${rc} -ne 0 ]; then
         success="0"
@@ -422,8 +404,7 @@
 # upgrade
 #####################################################
 
-function upgrade
-{
+function upgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- upgrade --"
         set -x
@@ -435,22 +416,22 @@
     echo "upgrade: ${CURRENT_RELEASE} -> ${TARGET_UPGRADE_RELEASE}"
 
     if [ ${CURRENT_RELEASE} \< ${TARGET_UPGRADE_RELEASE} ]; then
-	upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2> /dev/null)
+        upgradeSqls=$(ls -v "${UPGRADE_DIR}"/*/upgrade/*.sql 2>/dev/null)
         for sqlFile in ${upgradeSqls}; do
             sqlName=$(basename "${sqlFile}")
             schemaVersion="$(basename $(dirname $(dirname $sqlFile)))"
             previous_release $schemaVersion
-            if [ "${schemaVersion}" -gt "${CURRENT_RELEASE}" ] && \
+            if [ "${schemaVersion}" -gt "${CURRENT_RELEASE}" ] &&
                 [ "${schemaVersion}" -le "${TARGET_UPGRADE_RELEASE}" ]; then
                 tag=${tagDate}"${schemaVersion}u"
-                if [ $RETRY -eq 1 ] && \
+                if [ $RETRY -eq 1 ] &&
                     # Compare the numeric portion of the filename because shell doesn't support string comparison
-                    [ $(echo ${sqlName}| awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT}| awk -F- '{print $1}') ]; then
-                     rc=1
-		     echo "rc=1"
+                    [ $(echo ${sqlName} | awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT} | awk -F- '{print $1}') ]; then
+                    rc=1
+                    echo "rc=1"
                 else
-                     rc=0
-		     echo "rc=0"
+                    rc=0
+                    echo "rc=0"
                 fi
                 if [ ${rc} -eq 0 ]; then
                     run_script "upgrade" "${sqlName}" "${sqlFile}" "${PREVIOUS_RELEASE}" "${schemaVersion}" "${tag}"
@@ -474,8 +455,7 @@
 # downgrade
 #####################################################
 
-function downgrade
-{
+function downgrade() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- downgrade --"
         set -x
@@ -487,19 +467,19 @@
     echo "downgrade: ${CURRENT_RELEASE} -> ${TARGET_DOWNGRADE_RELEASE}"
 
     if [ ${CURRENT_RELEASE} \> ${TARGET_DOWNGRADE_RELEASE} ]; then
-        downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2> /dev/null)
+        downgradeSqls=$(ls -v -r "${DOWNGRADE_DIR}"/*/downgrade/*.sql 2>/dev/null)
         for sqlFile in ${downgradeSqls}; do
             sqlName=$(basename "${sqlFile}")
             schemaVersion="$(basename $(dirname $(dirname $sqlFile)))"
-            if [ "${schemaVersion}" -le "${CURRENT_RELEASE}" ] && \
+            if [ "${schemaVersion}" -le "${CURRENT_RELEASE}" ] &&
                 [ "${schemaVersion}" -gt "${TARGET_DOWNGRADE_RELEASE}" ]; then
                 tag=${tagDate}"${schemaVersion}d"
-                if [ $RETRY -eq 1 ] && \
+                if [ $RETRY -eq 1 ] &&
                     # Compare the numeric portion of the filename because shell doesn't support string comparison
-                    [ $(echo ${sqlName}| awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT}| awk -F- '{print $1}') ]; then
-                     rc=1
+                    [ $(echo ${sqlName} | awk -F- '{print $1}') -${COMPARE} $(echo ${LAST_SCRIPT} | awk -F- '{print $1}') ]; then
+                    rc=1
                 else
-                     rc=0
+                    rc=0
                 fi
                 if [ ${rc} -eq 0 ]; then
                     run_script "downgrade" "${sqlName}" "${sqlFile}" "${schemaVersion}" "${PREVIOUS_RELEASE}" ${tag}
@@ -523,8 +503,7 @@
 # erase
 #####################################################
 
-function erase
-{
+function erase() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- erase --"
         set -x
@@ -537,7 +516,7 @@
     local deleteHistory="DELETE FROM ${METADATA_HISTORY};"
     ${PSQL} --command "${deleteHistory}"
 
-    local dropDB="DROP DATABASE IF EXISTS ${SCHEMA_DB}";
+    local dropDB="DROP DATABASE IF EXISTS ${SCHEMA_DB}"
     ${PSQL} --command "${dropDB}"
 }
 
@@ -545,8 +524,7 @@
 # report
 #####################################################
 
-function report
-{
+function report() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- report --"
         set -x
@@ -562,8 +540,7 @@
     okay
 }
 
-function okay
-{
+function okay() {
     if [ "${DEBUG}" = "y" ]; then
         echo "-- okay --"
         set -x
@@ -599,40 +576,47 @@
 fi
 until [ -z "$1" ]; do
     case $1 in
-        -s|--schema|--database)    shift
-             SCHEMA=$1
-             ;;
-        -b|--basedir)   shift
-             MIGRATION_DIR=$1
-             ;;
-        -t|--target)    shift
-             INPUT_TARGET_RELEASE=$1
-             ;;
-        -f|--from)      shift
-             INPUT_FROM_RELEASE=$1
-             ;;
-        -o|--operation) shift
-             OPERATION=$1
-             ;;
-        *)              usage
-             exit 1
-             ;;
+    -s | --schema | --database)
+        shift
+        SCHEMA=$1
+        ;;
+    -b | --basedir)
+        shift
+        MIGRATION_DIR=$1
+        ;;
+    -t | --target)
+        shift
+        INPUT_TARGET_RELEASE=$1
+        ;;
+    -f | --from)
+        shift
+        INPUT_FROM_RELEASE=$1
+        ;;
+    -o | --operation)
+        shift
+        OPERATION=$1
+        ;;
+    *)
+        usage
+        exit 1
+        ;;
     esac
     shift
 done
 
 case ${OPERATION} in
-    upgrade)    ;;
-    downgrade)  ;;
-    auto)       ;;
-    version)    ;;
-    erase)      ;;
-    report)     ;;
-    ok)         ;;
-    *)          echo "error: invalid operation provided"
-                usage
-                exit 1
-                ;;
+    upgrade) ;;
+    downgrade) ;;
+    auto) ;;
+    version) ;;
+    erase) ;;
+    report) ;;
+    ok) ;;
+    *)
+        echo "error: invalid operation provided"
+        usage
+        exit 1
+        ;;
 esac
 
 if [ -z "${SCHEMA}" ]; then
@@ -648,7 +632,7 @@
     exit 4
 fi
 
-PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${SQL_DB}";
+PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${SQL_DB}"
 if ! ${PSQL} --command '\l'; then
     echo "error: No DB connectivity to ${SQL_HOST} for ${SQL_USER}"
     exit 5
@@ -658,7 +642,7 @@
     SCHEMA="*"
 fi
 
-SCHEMA_S=$(ls -d "${MIGRATION_DIR}"/${SCHEMA}/ 2> /dev/null)
+SCHEMA_S=$(ls -d "${MIGRATION_DIR}"/${SCHEMA}/ 2>/dev/null)
 if [ -z "${SCHEMA_S}" ]; then
     echo "error: no databases available"
     exit 0
@@ -679,7 +663,7 @@
     TARGET_RELEASE=${INPUT_TARGET_RELEASE}
 
     if is_upgrade && is_downgrade; then
-        echo "${SCHEMA}: failure: invalid configuration: ${UPGRADE_SQL_SUFFIX} and "\
+        echo "${SCHEMA}: failure: invalid configuration: ${UPGRADE_SQL_SUFFIX} and " \
             "${DOWNGRADE_SQL_SUFFIX} exist under ${DOWNGRADE_DIR}"
         rc=1
         continue
@@ -718,7 +702,7 @@
         fi
     fi
 
-    PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${SQL_DB}";
+    PSQL="psql -h ${SQL_HOST} -U ${SQL_USER} -d ${SQL_DB};"
     # Check if the schema has already been installed
     current_schema
     RETRY=0
@@ -726,29 +710,29 @@
     last_operation_status
     last_status=$?
     if [ $last_status -eq 0 ]; then
-         echo "Partial $LAST_OPERATION detected"
-         RETRY=1
-         if [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'downgrade' ]; then
-              CURRENT_RELEASE="${LAST_FROM_VERSION}"
-              # greater than
-              COMPARE="gt"
-              echo "Downgrade will attempt to resume at $LAST_SCRIPT"
-         elif [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
-              CURRENT_RELEASE="${LAST_TO_VERSION}"
-              # greater than or equal to
-              COMPARE="ge"
-              echo "Downgrade will attempt to resume before $LAST_SCRIPT"
-         elif [ "${OPERATION}" == 'upgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
-              CURRENT_RELEASE="${LAST_FROM_VERSION}"
-              # less than
-              COMPARE="lt"
-              echo "Upgrade will attempt to resume at $LAST_SCRIPT"
-         else
-              CURRENT_RELEASE="${LAST_TO_VERSION}"
-              # less than or equal
-              COMPARE="le"
-              echo "Upgrade will attempt to resume after $LAST_SCRIPT"
-         fi
+        echo "Partial $LAST_OPERATION detected"
+        RETRY=1
+        if [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'downgrade' ]; then
+            CURRENT_RELEASE="${LAST_FROM_VERSION}"
+            # greater than
+            COMPARE="gt"
+            echo "Downgrade will attempt to resume at $LAST_SCRIPT"
+        elif [ "${OPERATION}" == 'downgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
+            CURRENT_RELEASE="${LAST_TO_VERSION}"
+            # greater than or equal to
+            COMPARE="ge"
+            echo "Downgrade will attempt to resume before $LAST_SCRIPT"
+        elif [ "${OPERATION}" == 'upgrade' ] && [ "${LAST_OPERATION}" == 'upgrade' ]; then
+            CURRENT_RELEASE="${LAST_FROM_VERSION}"
+            # less than
+            COMPARE="lt"
+            echo "Upgrade will attempt to resume at $LAST_SCRIPT"
+        else
+            CURRENT_RELEASE="${LAST_TO_VERSION}"
+            # less than or equal
+            COMPARE="le"
+            echo "Upgrade will attempt to resume after $LAST_SCRIPT"
+        fi
     fi
 
     if [ -n "${INPUT_FROM_RELEASE}" ]; then
@@ -761,29 +745,35 @@
     fi
 
     case ${OPERATION} in
-        upgrade)     if upgrade; then
-                         echo "${SCHEMA}: OK: upgrade (${CURRENT_RELEASE})"
-                     else
-                         rc=1
-                         echo "${SCHEMA}: failure: upgrade to release ${TARGET_UPGRADE_RELEASE} (${CURRENT_RELEASE})"
-                     fi
-                     ;;
-        downgrade)   if downgrade; then
-                         echo "${SCHEMA}: OK: downgrade (${CURRENT_RELEASE})"
-                     else
-                        rc=1
-                        echo "${SCHEMA}: failure: downgrade to release ${TARGET_DOWNGRADE_RELEASE} (${CURRENT_RELEASE})"
-                     fi
-                     ;;
-        version)     echo "${SCHEMA}: ${CURRENT_RELEASE}"
-                     ;;
-        erase)       erase
-                     ;;
-        report)      report
-                     ;;
-        ok)          okay
-                     ;;
-        esac
+    upgrade)
+        if upgrade; then
+            echo "${SCHEMA}: OK: upgrade (${CURRENT_RELEASE})"
+        else
+            rc=1
+            echo "${SCHEMA}: failure: upgrade to release ${TARGET_UPGRADE_RELEASE} (${CURRENT_RELEASE})"
+        fi
+        ;;
+    downgrade)
+        if downgrade; then
+            echo "${SCHEMA}: OK: downgrade (${CURRENT_RELEASE})"
+        else
+            rc=1
+            echo "${SCHEMA}: failure: downgrade to release ${TARGET_DOWNGRADE_RELEASE} (${CURRENT_RELEASE})"
+        fi
+        ;;
+    version)
+        echo "${SCHEMA}: ${CURRENT_RELEASE}"
+        ;;
+    erase)
+        erase
+        ;;
+    report)
+        report
+        ;;
+    ok)
+        okay
+        ;;
+    esac
 
 done
 exit $rc
