123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- @echo off
- setlocal enabledelayedexpansion
- :: Set database configuration
- set DB_NAME=soilgd
- set DB_USER=postgres
- :: Get project root directory
- set SCRIPT_DIR=%~dp0
- for %%i in ("%SCRIPT_DIR%..\..\") do set PROJECT_ROOT=%%~fi
- set BACKUP_FILE=%PROJECT_ROOT%soilgd.dump
- echo =====================================
- echo PostgreSQL Database Restore Tool
- echo =====================================
- echo.
- :: Check if backup file exists
- if not exist "%BACKUP_FILE%" (
- echo Error: Backup file not found: %BACKUP_FILE%
- echo Please ensure soilgd.dump exists in project root directory.
- echo Project root: %PROJECT_ROOT%
- pause
- exit /b 1
- )
- echo Will restore database from backup file:
- echo Backup file: %BACKUP_FILE%
- echo.
- set FULL_BACKUP_PATH=%BACKUP_FILE%
- echo =====================================
- echo WARNING: This will delete existing database and recreate it!
- echo Database: %DB_NAME%
- echo Backup file: %FULL_BACKUP_PATH%
- echo =====================================
- echo.
- echo Continue? (Y/N)
- set /p CONFIRM=
- if /i not "%CONFIRM%"=="Y" (
- echo Operation cancelled.
- pause
- exit /b 0
- )
- echo.
- echo Starting restore process...
- :: Step 1: Terminate active connections and drop existing database
- echo 1. Terminating active connections to database %DB_NAME%...
- psql -U %DB_USER% -d postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '%DB_NAME%' AND pid <> pg_backend_pid();" 2>nul
- echo 2. Dropping existing database %DB_NAME%...
- dropdb -U %DB_USER% %DB_NAME% 2>nul
- if %ERRORLEVEL% EQU 0 (
- echo Database dropped successfully
- ) else (
- echo Database may not exist or cannot be dropped (this is usually normal)
- )
- :: Step 2: Create new empty database
- echo 3. Creating new database %DB_NAME%...
- createdb -U %DB_USER% %DB_NAME% 2>nul
- if %ERRORLEVEL% NEQ 0 (
- echo Database creation failed, attempting to force drop and recreate...
-
- :: Force drop database with more aggressive approach
- psql -U %DB_USER% -d postgres -c "DROP DATABASE IF EXISTS %DB_NAME%;" 2>nul
-
- :: Try creating again
- createdb -U %DB_USER% %DB_NAME%
- if %ERRORLEVEL% NEQ 0 (
- echo Database creation still failed!
- echo Possible causes:
- echo 1. PostgreSQL service not running
- echo 2. Insufficient user permissions
- echo 3. Database is in use by other processes
- echo Please check and retry.
- pause
- exit /b 1
- )
- )
- echo Database created successfully
- :: Step 3: Restore data
- echo 4. Restoring data from backup file...
- pg_restore -U %DB_USER% -d %DB_NAME% "%FULL_BACKUP_PATH%"
- if %ERRORLEVEL% EQU 0 (
- echo Data restored successfully!
- ) else (
- echo Data restore failed! Please check:
- echo 1. Is backup file corrupted?
- echo 2. Is PostgreSQL service running?
- echo 3. Are user permissions correct?
- pause
- exit /b 1
- )
- echo.
- echo =====================================
- echo Database restore completed successfully!
- echo Database: %DB_NAME%
- echo Backup source: %FULL_BACKUP_PATH%
- echo =====================================
- echo.
- pause
|