#!/bin/bash
#####
PORT=8000
SLOT_NAME=test
PLUGIN_NAME=test_decoding
MSG_SIZE=1000000
LOOP=5
#####

for i in `seq 1 $LOOP`
do
# Cleanup previous result

pg_ctl stop -D data
rm -rf data 
rm logfile

# Initialize an instance
initdb -D data -U postgres -c wal_level=logical

cat << EOF >> data/postgresql.conf
listen_addresses = '*'
wal_level = logical
port = $PORT
shared_buffers = 8GB
checkpoint_timeout = 30min
max_wal_size = 20GB
min_wal_size = 10GB
#max_logical_replication_workers = 16
#max_parallel_apply_workers_per_subscription = 12
autovacuum = off
EOF

# Start the instance
pg_ctl -D data -l logfile start

# Create a replication slot
psql -U postgres -p $PORT -c "SELECT * FROM pg_create_logical_replication_slot('$SLOT_NAME', '$PLUGIN_NAME')"
psql -U postgres -p $PORT -c "SELECT * FROM pg_current_wal_lsn()"

# emit a message
psql -U postgres -p $PORT -c "SELECT 'msg5' FROM pg_logical_emit_message(true, 'test', repeat('a', $MSG_SIZE));"
psql -U postgres -p $PORT -c "SELECT * FROM pg_current_wal_lsn()"

t1=$(($(date +%s%N)/1000))
echo $t1 > run_${i}.dat
(time psql -d postgres -p $PORT -U postgres -c "SELECT data FROM pg_logical_slot_get_changes('test', NULL,NULL, 'include-xids', '0', 'skip-empty-xacts', '1', 'stream-changes', '1')") >> run_${i}.dat
t2=$(($(date +%s%N)/1000))
echo $t2 >> run_${i}.dat
t3=$((t2-t1))
echo "execution time=$t3" >> run_${i}.dat
done
