postgres/images/postgres-major-upgrade/root/usr/local/bin/pg-upgrade.sh

66 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
set -euo pipefail
mkdir -p /data/db
if [ -z "${PG_FROM}" ]; then
echo "You must set PG_FROM env var to the source version"
exit 1
elif [ -z "${PG_TO}" ]; then
echo "You must set PG_TO env var to the destination version"
exit 1
elif [ ! -d "${PG_BASE_DATA}/${PG_FROM}" ]; then
echo "Source data dir ${PG_BASE_DATA}/${PG_FROM} must already exist"
exit 1
fi
if [ -z "${DO_PG_UPGRADE}" -o "${DO_PG_UPGRADE}" != "true" ]; then
echo "Not running the upgrade. Please set DO_PG_UPGRADE=true"
fi
cd "${PG_BASE_DATA}"
echo "Creating new data dir for version ${PG_TO}"
mkdir -p "${PG_BASE_DATA}/${PG_TO}"
chmod 700 "${PG_BASE_DATA}/${PG_TO}"
echo "Commenting SSL directives (SSL cert not available, nor needed in the upgrade context)"
cp "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf" "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf.old"
sed -i -r 's/^(ssl.*)/#\1/g' "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf"
echo "Commenting Socket directive"
sed -i -r 's/^(unix_socket_directories.*)/#\1/g' "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf"
#echo "Commenting shared_preload_libraries directive"
#sed -i -r 's/^(shared_preload_libraries.*)/#\1/g' "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf"
echo "Commenting log_XXX directives"
sed -i -r 's/^(log_.*)/#\1/g' "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf"
echo "Replacing pg_hba with a custom one"
cp "${PG_BASE_DATA}/${PG_FROM}/pg_hba.conf" "${PG_BASE_DATA}/${PG_FROM}/pg_hba.conf.old"
cat <<_EOF > "${PG_BASE_DATA}/${PG_FROM}/pg_hba.conf"
local all postgres peer
_EOF
echo "Initializing new PG cluster"
/usr/pgsql-${PG_TO}/bin/initdb --pgdata=${PG_BASE_DATA}/${PG_TO} ${PG_INITDB_OPTS}
echo "Upgrading PG data from ${PG_BASE_DATA}/${PG_FROM} to ${PG_BASE_DATA}/${PG_TO}"
/usr/pgsql-${PG_TO}/bin/pg_upgrade \
${PG_UPGRADE_OPTS} \
--old-datadir "${PG_BASE_DATA}/${PG_FROM}" \
--new-datadir "${PG_BASE_DATA}/${PG_TO}" \
--old-bindir /usr/pgsql-${PG_FROM}/bin \
--new-bindir /usr/pgsql-${PG_TO}/bin
if [ -e "${PG_BASE_DATA}/${PG_FROM}/patroni.dynamic.json" ]; then
echo "Keep old patroni.dynamic.json config"
cp ${PG_BASE_DATA}/${PG_FROM}/patroni.dynamic.json ${PG_BASE_DATA}/${PG_TO}/
fi
echo "Restoring configuration"
cp -f "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf.old" "${PG_BASE_DATA}/${PG_FROM}/postgresql.conf"
cp -f "${PG_BASE_DATA}/${PG_FROM}/pg_hba.conf.old" "${PG_BASE_DATA}/${PG_FROM}/pg_hba.conf"