Skip to content

Instantly share code, notes, and snippets.

@greenido
Created May 28, 2025 21:36
Show Gist options
  • Save greenido/ff3d4cebaf502d90233f8872e572f4bc to your computer and use it in GitHub Desktop.
Save greenido/ff3d4cebaf502d90233f8872e572f4bc to your computer and use it in GitHub Desktop.
This script finds and removes all PostgreSQL Docker data locations
#!/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