#! /bin/sh # Primary setup /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data echo "archive_mode = on archive_command = 'cp %p /tmp/archive/%f' max_prepared_transactions = 10" >> /usr/local/pgsql/data/postgresql.conf /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /tmp/logfile_p start # Secondary setup /usr/local/pgsql/bin/pg_basebackup -D /usr/local/pgsql/data_s -X stream && touch /usr/local/pgsql/data_s/recovery.signal echo "port = 6432 restore_command = 'cp /tmp/archive/%f %p' recovery_target_name = 'rp' recovery_target_action = 'promote' max_prepared_transactions = 20" >> /usr/local/pgsql/data_s/postgresql.conf # Workload echo "CREATE TABLE foo(i int); BEGIN; INSERT INTO foo VALUES(1); PREPARE TRANSACTION 'fooinsert'; SELECT pg_create_restore_point('rp'); INSERT INTO foo VALUES(2); SELECT pg_switch_wal(); " > /tmp/workload.sql /usr/local/pgsql/bin/psql postgres -f /tmp/workload.sql /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data_s -l /tmp/logfile_s start sleep 5 /usr/local/pgsql/bin/pg_waldump /tmp/archive/000000010000000000000003 > /tmp/archive_000000010000000000000003 /usr/local/pgsql/bin/pg_waldump /usr/local/pgsql/data_s/pg_wal/000000010000000000000003 > /tmp/standby_000000010000000000000003 diff -u /tmp/archive_000000010000000000000003 /tmp/standby_000000010000000000000003 > /tmp/waldiff.diff cat /tmp/waldiff.diff