:
# Test for VACUUM & TRUNCATE
# Test for 1000 relations
# Insert only 1 block per relation (8kB)
set -x

DIR=`pwd`

# Update the path to directory depending on your environment
#PGDATA=/home/postgres/master/data #Master Directory
PGDATA=/home/postgres/cached/data #Patched Directory

DB=test

MNUM=1
# Number of tables = NUM ÷ SUB
# Currently, 1000 relations
NUM=1000000
SUB=1000

EXIT="exit 0"

########################################################
if [ "$1" = "create" ]; then

	createdb ${DB}

	COUNT=1

	while [ ${COUNT} -le ${MNUM} ]
	do

		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			echo "CREATE TABLE table_${COUNT}_${CNT}_${CNT2}(COL1 int);" | psql -d ${DB}

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done

		COUNT=`expr $COUNT + 1`
	done

	${EXIT}
fi

#########################################################
#-----------------INSERT DATA TO TABLES-----------------#
if [ "$1" = "insert" ]; then

	COUNT=1
	date +%Y/%m/%d_%H:%M:%S.%3N
	while [ ${COUNT} -le ${MNUM} ]
	do
		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			psql -d ${DB} -c "INSERT into table_${COUNT}_${CNT}_${CNT2} VALUES (1);"

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done

		COUNT=`expr $COUNT + 1`
	done
	date +%Y/%m/%d_%H:%M:%S.%3N

	cd ${DIR}

	${EXIT}
fi


##########################################################
#-----------TRUNCATE EACH TABLE (SEPARATE TXN)-----------#
if [ "$1" = "truncate" ]; then

	COUNT=1
	while [ ${COUNT} -le ${MNUM} ]
	do

		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			date +%Y/%m/%d_%H:%M:%S.%3N
			psql -d ${DB} -c "TRUNCATE table_${COUNT}_${CNT}_${CNT2};"

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done
		date +%Y/%m/%d_%H:%M:%S.%3N

		COUNT=`expr $COUNT + 1`
	done

	${EXIT}
fi

##########################################################
#------------VACUUM EACH TABLE (SEPARATE TXN)------------#
if [ "$1" = "vacuum" ]; then

	COUNT=1
	while [ ${COUNT} -le ${MNUM} ]
	do
		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			date +%Y/%m/%d_%H:%M:%S.%3N
			psql -d ${DB} -c "VACUUM table_${COUNT}_${CNT}_${CNT2};"

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done
		date +%Y/%m/%d_%H:%M:%S.%3N

		COUNT=`expr $COUNT + 1`
	done

	${EXIT}
fi

##########################################################
#---------DELETE EACH TABLE (SEPARATE TXN)---------#
if [ "$1" = "delete" ]; then

	COUNT=1
	while [ ${COUNT} -le ${MNUM} ]
	do

		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			date +%Y/%m/%d_%H:%M:%S.%3N
			psql -d ${DB} -c "DELETE FROM table_${COUNT}_${CNT}_${CNT2};"

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done
		date +%Y/%m/%d_%H:%M:%S.%3N

		COUNT=`expr $COUNT + 1`
	done

	${EXIT}
fi

########################################################
if [ "$1" = "pause" ]; then

	psql -c "SELECT pg_wal_replay_pause();" ${DB}

	${EXIT}
fi

########################################################
if [ "$1" = "resume" ]; then

	psql -c "SELECT pg_wal_replay_resume();" postgres

	#date +%Y/%m/%d_%H:%M:%S.%3N
	date +%M:%S.%3N

	pg_ctl promote -D ${PGDATA}

	set +x

	#date +%Y/%m/%d_%H:%M:%S.%3N
	date +%M:%S.%3N

	while [ 1 ]
	do
		RS=`psql -Atc "select pg_is_in_recovery();" postgres`		

		if [ ${RS} = "f" ]; then
			break
		fi
	done

	#date +%Y/%m/%d_%H:%M:%S.%3N
	date +%M:%S.%3N

	set -x

	${EXIT}
fi

########################################################
if [ "$1" = "stop" ]; then

	pg_ctl stop -D ${PGDATA} -w -mi

	${EXIT}
fi


########################################################
if [ "$1" = "dropdb" ]; then

	COUNT=1
	while [ ${COUNT} -le ${MNUM} ]
	do
		CNT=1
		CNT2=${SUB}
		while [ ${CNT} -le ${NUM} ]
		do
			date +%Y/%m/%d_%H:%M:%S.%3N
			psql -d ${DB} -c "DROP table_${COUNT}_${CNT}_${CNT2};"

			CNT=`expr $CNT2 + 1`
			CNT2=`expr ${CNT2} + ${SUB}`
		done
		date +%Y/%m/%d_%H:%M:%S.%3N

		COUNT=`expr $COUNT + 1`
	done

	dropdb ${DB}
	${EXIT}
fi

########################################################
