You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.4 KiB
PowerShell
34 lines
1.4 KiB
PowerShell
# Apply SQL migrations to PostgreSQL (Docker Compose service "postgres").
|
|
# See scripts/migrate.sh for behavior (skips 000001_* unless MIGRATE_INCLUDE_BOOTSTRAP=1 or -Bootstrap).
|
|
|
|
param([switch]$Bootstrap)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$Root = Split-Path -Parent $PSScriptRoot
|
|
$MigrationsDir = Join-Path $Root "backend/migrations"
|
|
$ComposeFile = if ($env:COMPOSE_FILE) { $env:COMPOSE_FILE } else { Join-Path $Root "docker-compose.yml" }
|
|
|
|
$DbUser = if ($env:DB_USER) { $env:DB_USER } else { "autohero" }
|
|
$DbName = if ($env:DB_NAME) { $env:DB_NAME } else { "autohero" }
|
|
$includeBootstrap = $Bootstrap -or ($env:MIGRATE_INCLUDE_BOOTSTRAP -eq "1")
|
|
|
|
Set-Location $Root
|
|
|
|
docker compose -f $ComposeFile exec -T postgres pg_isready -U $DbUser -d $DbName 2>$null | Out-Null
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "postgres is not ready or container is not running. Start: docker compose up -d postgres"
|
|
}
|
|
|
|
Get-ChildItem -Path $MigrationsDir -Filter "*.sql" | Sort-Object Name | ForEach-Object {
|
|
$name = $_.Name
|
|
if ($name -match '^000001_' -and -not $includeBootstrap) {
|
|
Write-Host "Skipping $name (set `$env:MIGRATE_INCLUDE_BOOTSTRAP='1' to apply bootstrap on an empty DB)"
|
|
return
|
|
}
|
|
Write-Host "Applying $name..."
|
|
Get-Content -LiteralPath $_.FullName -Raw | docker compose -f $ComposeFile exec -T postgres `
|
|
psql -v ON_ERROR_STOP=1 -U $DbUser -d $DbName
|
|
}
|
|
|
|
Write-Host "Done."
|