#!/bin/bash

set -exu
set -o errexit

PREFIX=/home/gsmol/task/13_devel
ARCHIVE_DIR=${PREFIX}/archive
PGDATA=${PREFIX}/data
PGDATA_RESTORE=${PREFIX}/restore
PORT=15432
PORT_RESTORED=15433
ARCHIVE_COMMAND="cp %p ${ARCHIVE_DIR}/"
RESTORE_COMMAND="cp ${ARCHIVE_DIR}/%f %p"

${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA} || echo "all is well"
${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_RESTORE} || echo "all is well"
rm -rf ${PGDATA} ${PGDATA_RESTORE} ${ARCHIVE_DIR}

mkdir -p ${ARCHIVE_DIR}

${PREFIX}/bin/initdb -k -D ${PGDATA}
echo "port = ${PORT}" >> ${PGDATA}/postgresql.auto.conf
echo "wal_level = logical" >> ${PGDATA}/postgresql.auto.conf
echo "archive_mode = on" >> ${PGDATA}/postgresql.auto.conf
echo "archive_command = '${ARCHIVE_COMMAND}'" >> ${PGDATA}/postgresql.auto.conf

# start cluster
${PREFIX}/bin/pg_ctl start -D ${PGDATA}

# backup cluster
${PREFIX}/bin/pg_basebackup -X stream -p ${PORT} -D ${PGDATA_RESTORE} -R

# generate some data
${PREFIX}/bin/pgbench -i -s 10 -p ${PORT} postgres

# setup PITR
touch ${PGDATA_RESTORE}/recovery.signal
echo "port = ${PORT_RESTORED}" >> ${PGDATA_RESTORE}/postgresql.auto.conf
echo "restore_command = '${RESTORE_COMMAND}'" >> ${PGDATA_RESTORE}/postgresql.auto.conf
echo "recovery_target = 'latest'" >> ${PGDATA_RESTORE}/postgresql.auto.conf
echo "recovery_target_action = 'promote'" >> ${PGDATA_RESTORE}/postgresql.auto.conf

# start PITR
${PREFIX}/bin/pg_ctl start -D ${PGDATA_RESTORE}
