Created
May 28, 2025 21:36
-
-
Save greenido/ff3d4cebaf502d90233f8872e572f4bc to your computer and use it in GitHub Desktop.
This script finds and removes all PostgreSQL Docker data locations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# PostgreSQL Docker Data Cleanup Script | |
# This script finds and removes all PostgreSQL Docker data locations | |
set -e # Exit on any error | |
echo "=== PostgreSQL Docker Data Cleanup ===" | |
echo "Warning: This will permanently delete all PostgreSQL data!" | |
echo "Press Ctrl+C within 10 seconds to cancel..." | |
sleep 10 | |
# Function to safely remove directories | |
safe_remove() { | |
local path="$1" | |
if [ -d "$path" ]; then | |
echo "Found PostgreSQL data at: $path" | |
echo "Size: $(du -sh "$path" 2>/dev/null | cut -f1)" | |
sudo rm -rf "$path" | |
echo "✓ Removed: $path" | |
fi | |
} | |
# Function to find and remove files | |
safe_remove_files() { | |
local pattern="$1" | |
local description="$2" | |
echo "Searching for $description..." | |
find / -name "$pattern" -type f 2>/dev/null | while read -r file; do | |
echo "Found: $file" | |
sudo rm -f "$file" | |
echo "✓ Removed: $file" | |
done | |
} | |
echo "Stopping all PostgreSQL containers..." | |
# Stop all running PostgreSQL containers | |
docker ps --filter "ancestor=postgres" --format "{{.ID}}" | xargs -r docker stop | |
docker ps -a --filter "ancestor=postgres" --format "{{.ID}}" | xargs -r docker rm | |
echo "Searching for PostgreSQL Docker volumes..." | |
# 1. Remove Docker named volumes containing PostgreSQL data | |
echo "Removing PostgreSQL Docker volumes..." | |
docker volume ls -q | grep -E "(postgres|postgresql|pg_)" | while read -r volume; do | |
echo "Found PostgreSQL volume: $volume" | |
docker volume rm "$volume" 2>/dev/null || echo "Warning: Could not remove volume $volume" | |
done | |
# 2. Common Docker volume mount paths | |
echo "Checking common Docker mount paths..." | |
safe_remove "/var/lib/postgresql" | |
safe_remove "/var/lib/postgres" | |
safe_remove "/opt/postgresql" | |
safe_remove "/opt/postgres" | |
# 3. Docker's default volume directory | |
echo "Checking Docker volumes directory..." | |
if [ -d "/var/lib/docker/volumes" ]; then | |
find /var/lib/docker/volumes -name "*postgres*" -type d 2>/dev/null | while read -r dir; do | |
safe_remove "$dir" | |
done | |
fi | |
# 4. Look for PostgreSQL data in common Docker Compose paths | |
echo "Checking common Docker Compose paths..." | |
safe_remove "/data/postgresql" | |
safe_remove "/data/postgres" | |
safe_remove "/docker-data/postgresql" | |
safe_remove "/docker-data/postgres" | |
# 5. Search user home directories for PostgreSQL Docker data | |
echo "Checking user directories..." | |
find /home -name "*postgres*" -type d 2>/dev/null | while read -r dir; do | |
if [[ "$dir" == *"docker"* ]] || [[ "$dir" == *"data"* ]]; then | |
safe_remove "$dir" | |
fi | |
done | |
# 6. Look for PostgreSQL configuration and data files | |
echo "Searching for PostgreSQL files..." | |
safe_remove_files "postgresql.conf" "PostgreSQL config files" | |
safe_remove_files "pg_hba.conf" "PostgreSQL auth config files" | |
safe_remove_files "postmaster.pid" "PostgreSQL PID files" | |
# 7. Check for bind mounts in current directory | |
echo "Checking current directory for PostgreSQL data..." | |
find . -maxdepth 3 -name "*postgres*" -type d 2>/dev/null | while read -r dir; do | |
safe_remove "$dir" | |
done | |
# 8. Remove any PostgreSQL Docker images (optional) | |
echo "Do you want to remove PostgreSQL Docker images as well? (y/N)" | |
read -r response | |
if [[ "$response" =~ ^[Yy]$ ]]; then | |
echo "Removing PostgreSQL Docker images..." | |
docker images --filter "reference=postgres*" --format "{{.ID}}" | xargs -r docker rmi -f | |
docker images --filter "reference=postgresql*" --format "{{.ID}}" | xargs -r docker rmi -f | |
fi | |
# 9. Clean up Docker system | |
echo "Cleaning up Docker system..." | |
docker system prune -f | |
docker volume prune -f | |
# 10. Final search for any remaining PostgreSQL directories | |
echo "Final search for remaining PostgreSQL data..." | |
echo "Searching entire filesystem (this may take a while)..." | |
find / -type d -name "*postgres*" 2>/dev/null | grep -v "/proc\|/sys\|/dev" | while read -r dir; do | |
if [ -d "$dir" ]; then | |
echo "Found remaining directory: $dir" | |
echo "Contents:" | |
ls -la "$dir" 2>/dev/null | head -5 | |
echo "Remove this directory? (y/N)" | |
read -r response | |
if [[ "$response" =~ ^[Yy]$ ]]; then | |
safe_remove "$dir" | |
fi | |
fi | |
done | |
echo "=== Cleanup Complete ===" | |
echo "PostgreSQL Docker data cleanup finished." | |
echo "Remaining disk space:" | |
df -h / |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment