#!/usr/bin/env bash # # Test PostgreSQL restore point recovery for single node (1 instance, regular hypertable) # and multi node cluster (4 instances, distributed hypertable). # # Make sure that single and multi node results match after recovery. # set -e set -o pipefail set -x SN_NAME=${SN_NAME:-sn} AN_NAME=${AN_NAME:-an} DN1_NAME=${DN1_NAME:-dn1} DN2_NAME=${DN2_NAME:-dn2} DN3_NAME=${DN3_NAME:-dn3} HOST=${HOST:-'localhost'} SN_PORT=${SN_PORT:-5442} AN_PORT=${AN_PORT:-5442} DN1_PORT=${DN1_PORT:-5443} DN2_PORT=${DN2_PORT:-5444} DN3_PORT=${DN3_PORT:-5445} TEST_DIR=${TEST_DIR:-$(pwd)} WAL_DIR=${TEST_DIR}/wal BASEBACKUP_DIR=${TEST_DIR}/basebackup STORAGE_DIR=${TEST_DIR}/storage RESULT_DIR=${TEST_DIR}/result TEST_RESTORE_POINT_1=${TEST_RESTORE_POINT_1:-rp1} TEST_RESTORE_POINT_2=${TEST_RESTORE_POINT_2:-rp2} TEST_RESTORE_POINT_3=${TEST_RESTORE_POINT_3:-rp3} PG_BINDIR=${PG_BINDIR:-$(pg_config --bindir)} PG_VERSION_MAJOR=$(${PG_BINDIR}/postgres -V | awk '{print $3}' | sed 's/\./ /g' | awk '{print $1}') PG_USER=${PG_USER:-postgres} function instance_configure() { NAME=$1 PORT=$2 RESTORE_POINT_NAME=$3 ${PG_BINDIR}/pg_ctl init -U ${PG_USER} -D "${STORAGE_DIR}/${NAME}" cat > "${STORAGE_DIR}/${NAME}/postgresql.conf" <> "${RECOVERY_FILE}" < ${RESULT_FILE_NAME} < '${DN1_NAME}', host => '${HOST}', port => ${DN1_PORT}); SELECT add_data_node('${DN2_NAME}', database => '${DN2_NAME}', host => '${HOST}', port => ${DN2_PORT}); SELECT add_data_node('${DN3_NAME}', database => '${DN3_NAME}', host => '${HOST}', port => ${DN3_PORT}); CREATE TABLE test(time timestamp NOT NULL, device int, temp float); SELECT create_distributed_hypertable('test', 'time', 'device', 3); INSERT INTO test VALUES('2017-01-01 06:01', 1, 1.1), ('2017-01-01 09:11', 3, 2.1); EOF # do initial basebackup instance_basebackup ${AN_NAME} ${HOST} ${AN_PORT} instance_basebackup ${DN1_NAME} ${HOST} ${DN1_PORT} instance_basebackup ${DN2_NAME} ${HOST} ${DN2_PORT} instance_basebackup ${DN3_NAME} ${HOST} ${DN3_PORT} # insert more data and create the restore points ${PG_BINDIR}/psql -U ${PG_USER} -p ${AN_PORT} -h ${HOST} ${AN_NAME} < ${RESULT_FILE_NAME} <= PG12)" exit 1 fi mkdir -p ${RESULT_DIR} echo "Running single node tests" test_single_node ${TEST_RESTORE_POINT_1} test_single_node ${TEST_RESTORE_POINT_2} test_single_node ${TEST_RESTORE_POINT_3} echo "Running multi node tests" test_multi_node ${TEST_RESTORE_POINT_1} test_multi_node ${TEST_RESTORE_POINT_2} test_multi_node ${TEST_RESTORE_POINT_3} echo "Compare results" test_diff ${TEST_RESTORE_POINT_1} test_diff ${TEST_RESTORE_POINT_2} test_diff ${TEST_RESTORE_POINT_3} instance_cleanup_dirs