41 lines
1.3 KiB
PowerShell
41 lines
1.3 KiB
PowerShell
# ===============================
|
|
# PostgreSQL Maintenance Script
|
|
# ===============================
|
|
|
|
# .\dbmaintance.ps1 -psql
|
|
|
|
param(
|
|
[switch]$psql = "D:\Program Files\PostgreSQL\17\bin\psql.exe"
|
|
)
|
|
|
|
# Config
|
|
$env:PGPASSWORD = "obelix" # Or better: use pgpass.conf instead
|
|
$dbUser = "postgres"
|
|
$dbName = "lst_db"
|
|
$dbHost = "localhost"
|
|
$dbPort = "5432"
|
|
|
|
# Path to psql (adjust if PostgreSQL is installed elsewhere)
|
|
|
|
|
|
# Show DB size before
|
|
& $psql -h $dbHost -p $dbPort -U $dbUser -d $dbName -c "SELECT pg_size_pretty(pg_database_size(current_database())) AS size_before;"
|
|
|
|
# Run safe maintenance
|
|
& $psql -h $dbHost -p $dbPort -U $dbUser -d $dbName -c "VACUUM (ANALYZE);"
|
|
& $psql -h $dbHost -p $dbPort -U $dbUser -d $dbName -c "REINDEX DATABASE $dbName;"
|
|
|
|
# Show DB size after
|
|
& $psql -h $dbHost -p $dbPort -U $dbUser -d $dbName -c "SELECT pg_size_pretty(pg_database_size(current_database())) AS size_after;"
|
|
|
|
# Optional: per-table size breakdown
|
|
& $psql -h $dbHost -p $dbPort -U $dbUser -d $dbName -c @"
|
|
SELECT
|
|
schemaname || '.' || relname AS table_name,
|
|
pg_size_pretty(pg_total_relation_size(relid)) AS total_size,
|
|
pg_size_pretty(pg_relation_size(relid)) AS table_size,
|
|
pg_size_pretty(pg_total_relation_size(relid) - pg_relation_size(relid)) AS index_size
|
|
FROM pg_catalog.pg_statio_user_tables
|
|
ORDER BY pg_total_relation_size(relid) DESC;
|
|
"@
|