66 lines
2.3 KiB
Bash
Executable File
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"
|