Files
homelab-docker-config/central-database/migrate_service.sh
2026-03-08 16:05:21 +01:00

106 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# Generic PostgreSQL service migration script
# Usage: ./migrate_service.sh <service_name> <old_host> <old_port> <old_user> <old_password> <old_db>
set -e
if [ "$#" -ne 6 ]; then
echo "Usage: $0 <service_name> <old_host> <old_port> <old_user> <old_password> <old_db>"
exit 1
fi
SERVICE_NAME=$1
OLD_HOST=$2
OLD_PORT=$3
OLD_USER=$4
OLD_PASSWORD=$5
OLD_DB=$6
# Map service names to database names and users
case $SERVICE_NAME in
synapse)
NEW_DB="synapse"
NEW_USER="synapse_user"
NEW_PASSWORD="${SYNAPSE_POSTGRES_PASSWORD}"
;;
mas)
NEW_DB="mas"
NEW_USER="mas_user"
NEW_PASSWORD="${MAS_POSTGRES_PASSWORD}"
;;
signal)
NEW_DB="signal"
NEW_USER="signal_user"
NEW_PASSWORD="${MAUTRIX_SIGNAL_POSTGRES_PASSWORD}"
;;
whatsapp)
NEW_DB="whatsapp"
NEW_USER="whatsapp_user"
NEW_PASSWORD="${MAUTRIX_WHATSAPP_POSTGRES_PASSWORD}"
;;
paperless)
NEW_DB="paperless"
NEW_USER="paperless_user"
NEW_PASSWORD="${PAPERLESS_POSTGRES_PASSWORD}"
;;
immich)
NEW_DB="immich"
NEW_USER="immich_user"
NEW_PASSWORD="${IMMICH_POSTGRES_PASSWORD}"
;;
shlink)
NEW_DB="shlink"
NEW_USER="shlink_user"
NEW_PASSWORD="${SHLINK_POSTGRES_PASSWORD}"
;;
spliit)
NEW_DB="spliit"
NEW_USER="spliit_user"
NEW_PASSWORD="${SPLIIT_POSTGRES_PASSWORD}"
;;
audiomuse)
NEW_DB="audiomuse"
NEW_USER="audiomuse_user"
NEW_PASSWORD="${AUDIOMUSE_POSTGRES_PASSWORD}"
;;
*)
echo "Unknown service: $SERVICE_NAME"
exit 1
;;
esac
echo "Starting migration for $SERVICE_NAME to database $NEW_DB..."
# Export from old database
echo "Exporting data from $OLD_DB..."
PGPASSWORD="$OLD_PASSWORD" pg_dump \
-h "$OLD_HOST" \
-p "$OLD_PORT" \
-U "$OLD_USER" \
-d "$OLD_DB" \
-F custom \
-f "/tmp/${SERVICE_NAME}_dump.custom"
# Import to new database
echo "Importing data to $NEW_DB database..."
PGPASSWORD="$NEW_PASSWORD" pg_restore \
-h localhost \
-p 5432 \
-U "$NEW_USER" \
-d "$NEW_DB" \
--clean \
--if-exists \
"/tmp/${SERVICE_NAME}_dump.custom"
echo "Migration completed for $SERVICE_NAME!"
# Clean up
rm -f "/tmp/${SERVICE_NAME}_dump.custom"
echo "You can now update your $SERVICE_NAME service configuration to use:"
echo " Host: localhost"
echo " Port: 5432"
echo " Database: $NEW_DB"
echo " User: $NEW_USER"
echo " Password: ***"