#!/bin/bash set -e DATA_DIR="/var/lib/postgresql/data" OLD_VERSION_FILE="$DATA_DIR/PG_VERSION" NEW_VERSION="16" if [ -f "$OLD_VERSION_FILE" ]; then OLD_VERSION=$(cat "$OLD_VERSION_FILE") if [ "$OLD_VERSION" != "$NEW_VERSION" ]; then echo "Data version ($OLD_VERSION) differs from engine ($NEW_VERSION). Starting upgrade..." # 1. Move old data to a temporary folder mkdir -p $DATA_DIR/old_data mv $DATA_DIR/* $DATA_DIR/old_data/ || true # 2. Initialize new data directory mkdir $DATA_DIR/new_data initdb -D $DATA_DIR/new_data # 3. Run pg_upgrade # --link is used to avoid copying files (fast, but requires a backup!) pg_upgrade \ -d $DATA_DIR/old_data \ -D $DATA_DIR/new_data \ -b /usr/bin/postgres-16 \ -B /usr/local/bin \ --link echo "Upgrade complete. Cleaning up..." rm -rf $DATA_DIR/old_data mv $DATA_DIR/new_data/* $DATA_DIR/ rmdir $DATA_DIR/new_data fi fi exec $@