1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#!/bin/sh
TMPDIR=/tmp/pgis_upgrade_test-$$/
DATADIR=${TMPDIR}/cluster
LOGFILE=${TMPDIR}/log
INIT_SCRIPT=
export PGPORT=15432
export PGHOST=${TMPDIR}
export PGDATABASE=pgis
PG_CONFIG_OLD=
PG_CONFIG_NEW=
usage() {
echo "Usage: $0 [-i <init_script>] <pg_config_old> <pg_config_new>"
}
cleanup() {
if test -f ${DATADIR}/cluster/postmaster.pid; then
${BIN_OLD}/pg_ctl -D ${DATADIR} stop
fi
rm -rf ${TMPDIR}
}
trap 'cleanup' EXIT
mkdir -p ${TMPDIR}
while test -n "$1"; do
if test "$1" = "-i"; then
shift
INIT_SCRIPT=$1
if test -f ${INIT_SCRIPT}; then
:
else
echo "${INIT_SCRIPT} is not a file" >&2
exit 1
fi
shift
elif test -z "$PG_CONFIG_OLD"; then
PG_CONFIG_OLD="$1"
shift
elif test -z "$PG_CONFIG_NEW"; then
PG_CONFIG_NEW="$1"
shift
else
echo "Unrecognized argument: $1" >&2
usage >&2
exit 1
fi
done
if test -z "$PG_CONFIG_NEW"; then
echo "Missing new pg_config path" >&2
usage >&2
exit 1
fi
if test "$PG_CONFIG_OLD" = "$PG_CONFIG_NEW"; then
echo "Old and new pg_config paths need be different" >&2
exit 1
fi
BIN_OLD=$(${PG_CONFIG_OLD} --bindir)
BIN_NEW=$(${PG_CONFIG_NEW} --bindir)
echo "Testing cluster upgrade"
echo "FROM: $(${PG_CONFIG_OLD} --version)"
echo " TO: $(${PG_CONFIG_NEW} --version)"
echo "Creating FROM cluster"
${BIN_OLD}/initdb ${DATADIR} > ${LOGFILE} 2>&1 || {
cat ${LOGFILE} && exit 1
}
echo "Starting FROM cluster"
${BIN_OLD}/pg_ctl -D ${DATADIR} -o "-F -p ${PGPORT} -k ${TMPDIR}" -l ${LOGFILE} start || {
cat ${LOGFILE} && exit 1
}
echo "Creating FROM db"
${BIN_OLD}/createdb pgis || exit 1
#TODO: run an custom script
if test -n "$INIT_SCRIPT"; then
${BIN_OLD}/psql -X --set ON_ERROR_STOP=1 -f "$INIT_SCRIPT" || exit 1
else
${BIN_OLD}/psql -Xc --set ON_ERROR_STOP=1 "CREATE EXTENSION postgis" || exit 1
fi
echo "---- OLD cluster info -------------------------"
${BIN_OLD}/psql -XAt --set ON_ERROR_STOP=1 <<EOF || exit 1
SELECT version();
SELECT postgis_full_version();
EOF
echo "-----------------------------------------------"
echo "Stopping FROM cluster"
${BIN_OLD}/pg_ctl -D ${DATADIR} stop || exit 1
export PGDATAOLD=${DATADIR}.old
mv ${DATADIR} ${PGDATAOLD}
export PGDATANEW=${DATADIR}
echo "Creating TO cluster"
${BIN_NEW}/initdb ${PGDATANEW} > ${LOGFILE} 2>&1 || {
cat ${LOGFILE} && exit 1
}
echo "Upgrading cluster"
cd ${TMPDIR}
${BIN_NEW}/pg_upgrade --link -b ${BIN_OLD} -B ${BIN_NEW} > ${LOGFILE} 2>&1 || {
cat ${LOGFILE}
DUMPLOG=$(grep 'pg_upgrade_dump.*log' ${LOGFILE} | cut -d'"' -f2)
if test -n "${DUMPLOG}"; then
echo "${DUMPLOG} follows:"
tail ${TMPDIR}/${DUMPLOG}
fi
exit 1
}
echo "Starting TO cluster"
${BIN_NEW}/pg_ctl -D ${DATADIR} -o "-F -p ${PGPORT} -k ${TMPDIR}" -l ${LOGFILE} start || {
cat ${LOGFILE} && exit 1
}
echo "---- NEW cluster info -------------------------"
${BIN_NEW}/psql -XAx <<EOF || exit 1
SELECT version();
SELECT postgis_full_version();
SELECT postgis_extensions_upgrade();
SELECT postgis_full_version();
EOF
echo "-----------------------------------------------"
|