# PostgreSQL Backup Logging - External Tool References ## Overview All logging messages have been updated to explicitly clarify that `pg_dump` and `pg_restore` are **external command-line tools** being executed as separate processes, not internal library functions. ## Updated Log Messages ### PostgresBackupService.cs #### Backup Creation: ```csharp // Before: "Starting PostgreSQL backup to {BackupPath}" "Executing: {PgDump} {Arguments}" "Successfully created PostgreSQL backup at {BackupPath}" // After: "Starting PostgreSQL backup using external pg_dump tool to {BackupPath}" "Executing external command: {PgDump} {Arguments}" "Successfully created PostgreSQL backup using external pg_dump at {BackupPath}" ``` #### Backup Restoration: ```csharp // Before: "Starting PostgreSQL restore from {BackupPath}" "Successfully restored PostgreSQL backup from {BackupPath}" // After: "Starting PostgreSQL restore using external pg_restore tool from {BackupPath}" "Successfully restored PostgreSQL backup using external pg_restore from {BackupPath}" ``` #### Backup Deletion: ```csharp // Before (in PostgresDatabaseProvider): "Deleted local PostgreSQL backup: {BackupPath}" // After: "Deleted local PostgreSQL backup created by external pg_dump: {BackupPath}" ``` #### Error Messages: ```csharp // Before: "{defaultExecutableName} executable not found. Please configure the path in database.xml or ensure it's in the system PATH." // After: "External {defaultExecutableName} executable not found. Please configure the path in database.xml or ensure PostgreSQL client tools are installed and in the system PATH." ``` ### PostgresDatabaseProvider.cs #### Initialization Messages: ```csharp // Before: "PostgreSQL backup service initialized for local database" "PostgreSQL database is on remote server ({Host}). Backup operations via pg_dump/pg_restore are disabled" // After: "PostgreSQL backup service initialized for local database (will use external pg_dump/pg_restore tools)" "PostgreSQL database is on remote server ({Host}). Backup operations via external pg_dump/pg_restore tools are disabled" ``` #### Backup Operation Messages: ```csharp // Before: "PostgreSQL local backup created: {BackupPath}" "Failed to create local PostgreSQL backup using pg_dump" "Fast backup is not implemented for PostgreSQL on a remote server. Use pg_dump manually..." // After: "PostgreSQL local backup created using external pg_dump: {BackupPath}" "Failed to create local PostgreSQL backup using external pg_dump" "Fast backup is not implemented for PostgreSQL on a remote server. Use external pg_dump command manually..." ``` #### Restore Operation Messages: ```csharp // Before: "PostgreSQL local backup restored from: {BackupPath}" "Failed to restore local PostgreSQL backup using pg_restore" "Fast restore is not implemented for PostgreSQL on a remote server. Use pg_restore manually..." // After: "PostgreSQL local backup restored using external pg_restore from: {BackupPath}" "Failed to restore local PostgreSQL backup using external pg_restore" "Fast restore is not implemented for PostgreSQL on a remote server. Use external pg_restore command manually..." ``` #### Delete Operation Messages: ```csharp // Before: "Failed to delete local PostgreSQL backup: {BackupKey}" "Backup deletion is not implemented for PostgreSQL on a remote server. Manage backups externally." // After: "Failed to delete local PostgreSQL backup created by external pg_dump: {BackupKey}" "Backup deletion is not implemented for PostgreSQL on a remote server. Manage backups created by external pg_dump/pg_restore manually." ``` ## Complete Log Flow Examples ### Successful Local Backup: ``` [INFO] PostgreSQL backup service initialized for local database (will use external pg_dump/pg_restore tools) [INFO] Starting PostgreSQL backup using external pg_dump tool to /data/backups/jellyfin_postgres_backup_20250128_143022.dump [DEBUG] Executing external command: pg_dump -h localhost -p 5432 -U jellyfin -d jellyfin -F c -Z 6 -b -v -f "/data/backups/jellyfin_postgres_backup_20250128_143022.dump" [INFO] Successfully created PostgreSQL backup using external pg_dump at /data/backups/jellyfin_postgres_backup_20250128_143022.dump (15728640 bytes) [INFO] PostgreSQL local backup created using external pg_dump: /data/backups/jellyfin_postgres_backup_20250128_143022.dump ``` ### Successful Local Restore: ``` [INFO] Starting PostgreSQL restore using external pg_restore tool from /data/backups/jellyfin_postgres_backup_20250128_143022.dump [INFO] Successfully restored PostgreSQL backup using external pg_restore from /data/backups/jellyfin_postgres_backup_20250128_143022.dump [INFO] PostgreSQL local backup restored using external pg_restore from: /data/backups/jellyfin_postgres_backup_20250128_143022.dump ``` ### Successful Local Delete: ``` [INFO] Deleted local PostgreSQL backup created by external pg_dump: /data/backups/jellyfin_postgres_backup_20250128_143022.dump ``` ### Remote Database (Backups Disabled): ``` [INFO] PostgreSQL database is on remote server (db.example.com). Backup operations via external pg_dump/pg_restore tools are disabled [WARN] Fast backup is not implemented for PostgreSQL on a remote server. Use external pg_dump command manually for proper backups. ``` ### Error: External Tool Not Found: ``` [ERROR] External pg_dump executable not found. Please configure the path in database.xml or ensure PostgreSQL client tools are installed and in the system PATH. ``` ## Benefits of Updated Messaging 1. **Clarity**: Users understand that these are external processes, not built-in functionality 2. **Troubleshooting**: Makes it clear that PostgreSQL client tools must be installed 3. **Expectations**: Sets proper expectations about what the system is doing 4. **Documentation**: Helps users understand the requirement for external dependencies 5. **Transparency**: Makes the technical implementation more transparent ## Technical Details - **Process Execution**: `System.Diagnostics.Process.Start()` is used to launch pg_dump/pg_restore - **Environment Variables**: `PGPASSWORD` is set in the process environment for authentication - **Standard Output/Error**: Captured for logging and error handling - **Working Directory**: Backup files are created in the Jellyfin data directory - **Timeout Handling**: Configurable timeout prevents hung processes ## For Users These updated messages help users understand that: 1. Jellyfin requires PostgreSQL client tools to be installed 2. The backup functionality calls out to external commands 3. Path configuration in `database.xml` points to actual executables 4. Error messages about missing executables mean the tools need to be installed ## For Developers The updated logging makes it clear: 1. We're using process execution, not a library 2. External dependencies are required 3. Configuration affects external tool execution 4. Debugging should include checking if tools are in PATH or configured correctly