96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to restore icon and icon_groups tables to PostgreSQL database
|
|
# Usage: ./restore-icons.sh [dump_file]
|
|
|
|
set -e
|
|
|
|
# Load environment variables if .env file exists
|
|
if [ -f .env ]; then
|
|
set -a
|
|
# Source .env file, handling comments and empty lines
|
|
while IFS= read -r line || [ -n "$line" ]; do
|
|
# Remove leading/trailing whitespace
|
|
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
# Skip empty lines and lines starting with #
|
|
[[ -z "$line" ]] && continue
|
|
[[ "$line" =~ ^# ]] && continue
|
|
# Remove inline comments (everything after # that's not in quotes)
|
|
line=$(echo "$line" | sed 's/#.*$//' | sed 's/[[:space:]]*$//')
|
|
# Skip if line is empty after removing comments
|
|
[[ -z "$line" ]] && continue
|
|
# Export the variable (only if it looks like KEY=VALUE)
|
|
if [[ "$line" =~ ^[[:alpha:]_][[:alnum:]_]*= ]]; then
|
|
export "$line" 2>/dev/null || true
|
|
fi
|
|
done < .env
|
|
set +a
|
|
fi
|
|
|
|
# Get database connection details from environment variables
|
|
DB_HOST="${DB_HOST:-localhost}"
|
|
DB_PORT="${DB_PORT:-5432}"
|
|
DB_NAME="${DB_NAME:-dmenu}"
|
|
DB_USER="${DB_USER:-postgres}"
|
|
|
|
# Input file name
|
|
if [ -z "$1" ]; then
|
|
echo "Error: Please provide a dump file to restore"
|
|
echo "Usage: ./restore-icons.sh <dump_file>"
|
|
echo "Example: ./restore-icons.sh icons_dump_20240101_120000.sql"
|
|
exit 1
|
|
fi
|
|
|
|
DUMP_FILE="$1"
|
|
|
|
# Check if dump file exists
|
|
if [ ! -f "${DUMP_FILE}" ]; then
|
|
echo "Error: Dump file '${DUMP_FILE}' not found!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Restoring icon_groups and icons tables..."
|
|
echo "Database: ${DB_NAME}@${DB_HOST}:${DB_PORT}"
|
|
echo "Dump file: ${DUMP_FILE}"
|
|
echo ""
|
|
|
|
# Ask for confirmation
|
|
read -p "This will replace existing data in icon_groups and icons tables. Continue? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Restore cancelled."
|
|
exit 0
|
|
fi
|
|
|
|
# Disable foreign key checks temporarily and truncate tables
|
|
echo "Clearing existing data..."
|
|
PGPASSWORD="${DB_PASS}" psql \
|
|
-h "${DB_HOST}" \
|
|
-p "${DB_PORT}" \
|
|
-U "${DB_USER}" \
|
|
-d "${DB_NAME}" \
|
|
-c "TRUNCATE TABLE icons CASCADE;" \
|
|
-c "TRUNCATE TABLE icon_groups CASCADE;"
|
|
|
|
# Restore data from dump file
|
|
echo "Restoring data from ${DUMP_FILE}..."
|
|
PGPASSWORD="${DB_PASS}" psql \
|
|
-h "${DB_HOST}" \
|
|
-p "${DB_PORT}" \
|
|
-U "${DB_USER}" \
|
|
-d "${DB_NAME}" \
|
|
-f "${DUMP_FILE}"
|
|
|
|
echo ""
|
|
echo "Restore completed successfully!"
|
|
echo ""
|
|
|
|
# Verify the restore
|
|
echo "Verifying restore..."
|
|
ICON_GROUPS_COUNT=$(PGPASSWORD="${DB_PASS}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT COUNT(*) FROM icon_groups;")
|
|
ICONS_COUNT=$(PGPASSWORD="${DB_PASS}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -t -c "SELECT COUNT(*) FROM icons;")
|
|
|
|
echo "icon_groups records: ${ICON_GROUPS_COUNT}"
|
|
echo "icons records: ${ICONS_COUNT}"
|
|
|