aports/main/postgresql-common/postgresql-common.trigger
2024-04-01 23:48:32 +00:00

72 lines
2.3 KiB
Bash

#!/bin/sh
# Sort dirs in reverse order to prefer a higher version if the user installed
# multiple versions at once.
for dir in $(printf '%s\n' "$@" | sort -r); do
pgver=${dir#*postgresql}
expr "$pgver" : '[0-9]*$' >/dev/null || continue
case "$dir" in
# This is needed for creating man pages symlinks after a -doc
# package is installed.
/usr/share/postgresql[0-9]*)
pg_versions fix
continue
;;
/usr/libexec/postgresql[0-9]*)
# 1. If the default version is already linked and provides postgres server.
if [ -f /usr/libexec/postgresql/postgres ]; then
pg_versions fix
# 2. If the default version is already linked and both the default version
# and the affected version provides only client programs.
elif [ -f /usr/libexec/postgresql/psql ] && ! [ -f "$dir"/postgres ]; then
pg_versions fix
# 3. If a new version has been installed and no default version has been
# set yet or the new version provides postgres server while the current
# default does not.
elif [ -f "$dir"/psql ]; then
echo "* Setting postgresql$pgver as the default version" >&2
pg_versions set-default "$pgver"
# 4. If the default version has not been set yet or it was uninstalled
# and there is some postgresql version installed.
elif pg_versions list -q >/dev/null; then
pgver=$(pg_versions list | head -n1)
echo "* Setting postgresql$pgver as the default version" >&2
# 5. There's no postgresql version installed.
else
pg_versions uninstall
fi
;;
*)
continue
;;
esac
done
# APK cannot offer the user an upgrade to a newer major version because it's
# provided by a different package. Thus we use this trigger and inform the user
# about a new major version if the current default version is not the latest.
# Find the latest available major version.
latest_ver=$(apk list -Pa postgresql \
| sed -En 's/.*\{postgresql([0-9]+)\}.*/\1/p' \
| sort | tail -n1) || exit 0
default_ver=$(pg_versions get-default -q) || exit 0
if [ "$latest_ver" ] && [ "$default_ver" -lt "$latest_ver" ]; then
cat >&2 <<-EOF
*
* You are using 'postgresql$default_ver'. It's recommended to upgrade to the latest
* major version provided by package 'postgresql$latest_ver'.
* Use command 'pg_versions' to switch between versions.
*
EOF
fi
exit 0