feat(db): added a db backup system
This commit is contained in:
71
scripts/dbBackup.ps1
Normal file
71
scripts/dbBackup.ps1
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# ==========================
|
||||||
|
# PostgresDump.ps1
|
||||||
|
# ==========================
|
||||||
|
|
||||||
|
# Get script folder and .env path
|
||||||
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
|
$envFile = Join-Path $scriptDir "..\.env"
|
||||||
|
|
||||||
|
if (!(Test-Path $envFile)) {
|
||||||
|
Write-Error "Missing .env file at $envFile"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse .env into a hashtable
|
||||||
|
$envVars = @{}
|
||||||
|
Get-Content $envFile | ForEach-Object {
|
||||||
|
# skip comments & empty lines
|
||||||
|
if ($_ -match '^\s*#') { return }
|
||||||
|
if ([string]::IsNullOrWhiteSpace($_)) { return }
|
||||||
|
|
||||||
|
$parts = $_ -split '=', 2
|
||||||
|
if ($parts.Count -eq 2) {
|
||||||
|
$key = $parts[0].Trim()
|
||||||
|
$val = $parts[1].Trim()
|
||||||
|
$envVars[$key] = $val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grab vars from hashtable
|
||||||
|
$PgHost = $envVars["DATABASE_HOST"]
|
||||||
|
$PgPort = $envVars["DATABASE_PORT"]
|
||||||
|
$PgUser = $envVars["DATABASE_USER"]
|
||||||
|
$PgPass = $envVars["DATABASE_PASSWORD"]
|
||||||
|
$PgDatabase = $envVars["DATABASE_DB"]
|
||||||
|
|
||||||
|
# Where to put dumps
|
||||||
|
$dumpFolder = Join-Path $scriptDir "..\db_backups"
|
||||||
|
if (!(Test-Path -Path $dumpFolder)) {
|
||||||
|
Write-Host "Creating backup folder: $dumpFolder"
|
||||||
|
New-Item -ItemType Directory -Path $dumpFolder -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Timestamp filename
|
||||||
|
$timestamp = Get-Date -Format "yyyyMMdd_HHmm"
|
||||||
|
$dumpFile = Join-Path $dumpFolder "$($PgDatabase)_$timestamp.sql"
|
||||||
|
|
||||||
|
# Location of pg_dump.exe (adjust if different version/path)
|
||||||
|
$pgDumpExe = "D:\Program Files\PostgreSQL\17\bin\pg_dump.exe"
|
||||||
|
|
||||||
|
# Set env var password so pg_dump can pick it up
|
||||||
|
$env:PGPASSWORD = $PgPass
|
||||||
|
|
||||||
|
Write-Host "Starting dump of $PgDatabase@$PgHost..."
|
||||||
|
|
||||||
|
& $pgDumpExe `
|
||||||
|
-h $PgHost `
|
||||||
|
-p $PgPort `
|
||||||
|
-U $PgUser `
|
||||||
|
-d $PgDatabase `
|
||||||
|
-F p `
|
||||||
|
-f $dumpFile
|
||||||
|
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-Host "✅ Dump complete: $dumpFile"
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Error "❌ Dump failed (exit code $LASTEXITCODE)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# clear password to be safe
|
||||||
|
Remove-Item Env:PGPASSWORD
|
||||||
Reference in New Issue
Block a user