File: check_cluster_upgrade.sh

package info (click to toggle)
postgis 3.3.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 87,748 kB
  • sloc: ansic: 158,671; sql: 91,546; xml: 54,004; cpp: 12,339; sh: 5,187; perl: 5,100; makefile: 3,085; python: 1,205; yacc: 447; lex: 151; javascript: 6
file content (143 lines) | stat: -rwxr-xr-x 3,371 bytes parent folder | download | duplicates (4)
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