#! /bin/bash ROOT=`pwd` LOGFILE="repro.log" PGPORT1=15432 PGPORT2=15433 PGDATA1=$ROOT/reprodata1 ARCHDIR1=$ROOT/reproarc1 PGDATA2=$ROOT/reprodata2 ARCHDIR2=$ROOT/reproarc2 function cleanup { echo -n "Killing servers..." pg_ctl -D $PGDATA1 -m i stop pg_ctl -D $PGDATA2 -m i stop echo "done." exit 1 } rm -r $PGDATA1 $PGDATA2 $ARCHDIR1 $ARCHDIR2 mkdir $ARCHDIR1 $ARCHDIR2 # Create primary echo "# Creating primary" initdb -D $PGDATA1 &>$LOGFILE cat >> $PGDATA1/postgresql.conf <>$LOGFILE # Create standby echo "# Creating standby" pg_basebackup -D $PGDATA2 -h /tmp -p $PGPORT1 &>>$LOGFILE cat >> $PGDATA2/postgresql.conf <>$LOGFILE sleep 3 echo "Start:" echo -n "Primary location: " psql -tAp $PGPORT1 -c "select pg_current_wal_lsn()" echo -n "Standby location: " psql -tAp $PGPORT2 -c "select pg_last_wal_receive_lsn()" # Delocate from boundary.. psql -p $PGPORT1 -c "create table t(); drop table t" &>>$LOGFILE sleep 1 # TEST 1: walreceiver stops just after a segment is completed echo "Before test 1:" echo -n "Primary location: " psql -tAp $PGPORT1 -c "select pg_current_wal_lsn()" echo -n "Standby location: " psql -tAp $PGPORT2 -c "select pg_last_wal_receive_lsn()" echo "# test 1" >> $LOGFILE touch /tmp/hoge1 # the number of records should be adjusted so that the LSN at "before # end test 1" below is locaed in the last page of the segment 3. psql -p $PGPORT1 -c "create table t(a int); insert into t (select a from generate_series(0, 259500) a); drop table t;" &>>$LOGFILE echo "# test 1 end" >> $LOGFILE psql -p $PGPORT1 -c "create table t(); drop table t" &>>$LOGFILE echo "before end test 1:" echo -n "Primary location: " psql -tAp $PGPORT1 -c "select pg_current_wal_lsn()" echo -n "Standby location: " psql -tAp $PGPORT2 -c "select pg_last_wal_receive_lsn()" psql -p $PGPORT1 -c "select pg_switch_wal()" &>>$LOGFILE sleep 2 echo "After test 1:" echo -n "Primary location: " psql -tAp $PGPORT1 -c "select pg_current_wal_lsn()" echo -n "Standby location: " psql -tAp $PGPORT2 -c "select pg_last_wal_receive_lsn()" psql -p $PGPORT1 -c "create table t(); drop table t; select pg_switch_wal()" &>>$LOGFILE psql -p $PGPORT1 -c "create table t(); drop table t; select pg_switch_wal()" &>>$LOGFILE sleep 2 # TEST 2: walreceiver stops while receiving filling chunks after a wal switch. echo "# test 2" >> $LOGFILE touch /tmp/hoge2 psql -p $PGPORT1 -c "create table t(); drop table t; select pg_switch_wal()" &>>$LOGFILE echo "# test 2 end" >> $LOGFILE sleep 2 echo "After test 2:" echo -n "Primary location: " psql -tAp $PGPORT1 -c "select pg_current_wal_lsn()" echo -n "Standby location: " psql -tAp $PGPORT2 -c "select pg_last_wal_receive_lsn()" # stop servers pg_ctl -D $PGDATA1 stop &>>$LOGFILE pg_ctl -D $PGDATA2 stop &>>$LOGFILE #show last several archived segments echo "# primary archive" ls $ARCHDIR1 | egrep '[3-9]$' echo "# standby archive" ls $ARCHDIR2 | egrep '[3-9]$'