# Life OS - Database Backup & Restore ## Quick Backup ```bash docker exec lifeos-db pg_dump -U postgres -d lifeos_dev -Fc -f /tmp/lifeos_dev_backup.dump docker cp lifeos-db:/tmp/lifeos_dev_backup.dump /opt/lifeos/backups/lifeos_dev_$(date +%Y%m%d_%H%M%S).dump ``` ## Quick Restore ```bash # Drop and recreate the database, then restore docker exec lifeos-db psql -U postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'lifeos_dev' AND pid <> pg_backend_pid();" docker exec lifeos-db psql -U postgres -c "DROP DATABASE lifeos_dev;" docker exec lifeos-db psql -U postgres -c "CREATE DATABASE lifeos_dev;" docker cp /opt/lifeos/backups/FILENAME.dump lifeos-db:/tmp/restore.dump docker exec lifeos-db pg_restore -U postgres -d lifeos_dev /tmp/restore.dump docker restart lifeos-dev ``` Replace `FILENAME.dump` with the actual backup filename. ## First-Time Setup Create the backups directory: ```bash mkdir -p /opt/lifeos/backups ``` ## List Available Backups ```bash ls -lh /opt/lifeos/backups/ ``` ## Notes - `-Fc` = custom format (compressed, supports selective restore) - Backup includes schema + data + indexes + triggers + search vectors - Restore terminates active connections first, then drops/recreates the DB - Restart the app container after restore so connection pool reconnects - lifeos_prod is untouched by these commands (only lifeos_dev)