فهرست منبع

更新数据库备份文件,更新数据库备份&导入脚本

drggboy 1 هفته پیش
والد
کامیت
614a33cc07
4فایلهای تغییر یافته به همراه164 افزوده شده و 1 حذف شده
  1. 1 1
      PROJECT_RULES.md
  2. 56 0
      scripts/demos/db_backup_tool.bat
  3. 107 0
      scripts/demos/db_restore_tool.bat
  4. BIN
      soilgd.dump

+ 1 - 1
PROJECT_RULES.md

@@ -571,7 +571,7 @@ pg_dump -U postgres soilgd > soilgd.sql
 
 #### 导入操作
 ```bash
-# 导入自定义格式备份
+# 导入自定义格式备份,若soilgd已存在,需要删除该数据库重新创建
 createdb -U postgres soilgd
 pg_restore -U postgres -d soilgd soilgd.dump
 

+ 56 - 0
scripts/demos/db_backup_tool.bat

@@ -0,0 +1,56 @@
+@echo off
+setlocal enabledelayedexpansion
+
+:: Set database configuration
+set DB_NAME=soilgd
+set DB_USER=postgres
+set BACKUP_DIR=backups
+
+:: Generate timestamp (format: YYYYMMDD_HHMMSS)
+:: Use simple PowerShell command to get timestamp
+for /f %%i in ('powershell -command "Get-Date -Format 'yyyyMMdd_HHmmss'"') do set TIMESTAMP=%%i
+
+echo =====================================
+echo   PostgreSQL Database Backup Tool
+echo =====================================
+echo.
+
+:: Create backup directory if not exists
+if not exist "%BACKUP_DIR%" (
+    echo Creating backup directory: %BACKUP_DIR%
+    mkdir "%BACKUP_DIR%"
+)
+
+:: Set backup filename
+set BACKUP_FILE=%BACKUP_DIR%\%DB_NAME%_backup_%TIMESTAMP%.dump
+
+echo Starting database backup: %DB_NAME%
+echo Backup file: %BACKUP_FILE%
+echo.
+
+:: Execute backup command
+echo Executing backup...
+pg_dump -U %DB_USER% -Fc %DB_NAME% > "%BACKUP_FILE%"
+
+:: Check if backup was successful
+if %ERRORLEVEL% EQU 0 (
+    echo.
+    echo Backup completed successfully!
+    echo Backup file saved to: %BACKUP_FILE%
+    
+    :: Display file size
+    for %%A in ("%BACKUP_FILE%") do (
+        echo Backup file size: %%~zA bytes
+    )
+) else (
+    echo.
+    echo Backup failed! Please check:
+    echo   1. Is PostgreSQL service running?
+    echo   2. Does database %DB_NAME% exist?
+    echo   3. Does user %DB_USER% have permissions?
+    echo   4. Is pg_dump command in system PATH?
+)
+
+echo.
+echo Backup operation completed.
+pause

+ 107 - 0
scripts/demos/db_restore_tool.bat

@@ -0,0 +1,107 @@
+@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

BIN
soilgd.dump