#!/bin/bash

PGDATA_PRIMARY=./data_seqtest_primary
PGDATA_STANDBY=./data_seqtest_standby
PORT_PRIMARY=5432
PORT_STANDBY=5433
PGUSER=postgres

## Create database and streaming replication environment

initdb -D $PGDATA_PRIMARY -U $PGUSER
cat >> $PGDATA_PRIMARY/postgresql.conf << EOF
port = $PORT_PRIMARY
EOF
pg_ctl start -w -D $PGDATA_PRIMARY

pg_basebackup -D $PGDATA_STANDBY -p $PORT_PRIMARY -U $PGUSER -R -X stream
sed -i "s/port = $PORT_PRIMARY/port = $PORT_STANDBY/" $PGDATA_STANDBY/postgresql.conf
pg_ctl start -w -D $PGDATA_STANDBY

## Create and check sequence

psql -p $PORT_PRIMARY -U $PGUSER -d postgres -c "CREATE DATABASE template_db;"
psql -p $PORT_PRIMARY -U $PGUSER -d template_db -c "CREATE SEQUENCE test_seq;"

psql -p $PORT_PRIMARY -U $PGUSER -d template_db << EOF
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');

SELECT last_value, log_cnt, is_called FROM test_seq;
SELECT currval('test_seq');
EOF

psql -p $PORT_PRIMARY -U $PGUSER -d postgres -c "CREATE DATABASE test_db TEMPLATE template_db;"
psql -p $PORT_PRIMARY -U $PGUSER -d test_db << EOF
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');
SELECT nextval('test_seq');

SELECT last_value, log_cnt, is_called FROM test_seq;
SELECT currval('test_seq');
EOF

## Promote standby and check if sequence value is rollbacked

sleep 3

psql -p $PORT_STANDBY -U $PGUSER -d test_db -c "SELECT last_value, log_cnt, is_called FROM test_seq;"

pg_ctl -w -D $PGDATA_PRIMARY stop
pg_ctl -w -D $PGDATA_STANDBY promote

psql -p $PORT_STANDBY -U $PGUSER -d test_db << EOF
SELECT last_value, log_cnt, is_called FROM test_seq;
SELECT nextval('test_seq');

SELECT last_value, log_cnt, is_called FROM test_seq;
SELECT currval('test_seq');
EOF

