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 135 136 137 138 139 140 141 142 143
|
#!/bin/sh
TMPDIR=/tmp/pgis_upgrade_test-$$/
DATADIR=${TMPDIR}/cluster
LOGFILE=${TMPDIR}/log
INIT_SCRIPT=
export PGPORT=15432
export PGHOST=${TMPDIR}
export PGDATABASE=postgis_cluster_upgrade_test
PG_CONFIG_OLD=
PG_CONFIG_NEW=
usage() {
echo "Usage: $0 [-i <init_script>] <pg_config_old> <pg_config_new>"
}
cleanup() {
echo "-- Cleaning up --"
echo "Stopping postmaster on ${DATADIR} up"
${BIN_OLD}/pg_ctl -D ${DATADIR} stop
echo "Removing ${TMPDIR}"
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 ${PGDATABASE} || exit 1
# run an custom script
if test -n "$INIT_SCRIPT"; then
${BIN_OLD}/psql -XAt --set ON_ERROR_STOP=1 -f "$INIT_SCRIPT" || exit 1
else
${BIN_OLD}/psql -XAt --set ON_ERROR_STOP=1 -c "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 -XAt <<EOF || exit 1
SELECT version();
SELECT postgis_full_version();
EOF
echo "-----------------------------------------------"
echo "---- Extensions upgrade call -------------------"
${BIN_NEW}/psql -XAt <<EOF || exit 1
SELECT postgis_extensions_upgrade();
SELECT postgis_full_version();
EOF
echo "-----------------------------------------------"
# TODO: run some checks with --nocreate and appropriate PG
|