diff --git a/postgresql_backup/pg_backup.sh b/postgresql_backup/pg_backup.sh new file mode 100644 index 0000000..e77646c --- /dev/null +++ b/postgresql_backup/pg_backup.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Configuration +HOST="localhost" +PORT="5432" +USER="your_postgres_user" +BACKUP_PATH="/path/to/backup/directory" +DUMP_FORMAT="custom" # Set to "custom" for .dump or "sql" for plaintext SQL +EXTENSION="dump" # Default extension + +# Adjust file extension based on dump format +if [[ "$DUMP_FORMAT" == "sql" ]]; then + EXTENSION="sql.gz" +fi + +# Create backup directory if it doesn't exist +mkdir -p "$BACKUP_PATH" + +# Get a list of all databases, excluding template databases +DATABASES=$(psql -h "$HOST" -p "$PORT" -U "$USER" -d postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;") + +# Loop over each database and create a backup +for DB in $DATABASES; do + BACKUP_FILE="$BACKUP_PATH/$DB.$EXTENSION" + + if [[ "$DUMP_FORMAT" == "custom" ]]; then + # Create a compressed custom-format backup + pg_dump -h "$HOST" -p "$PORT" -U "$USER" -Fc "$DB" -f "$BACKUP_FILE" + elif [[ "$DUMP_FORMAT" == "sql" ]]; then + # Create a plain-text SQL backup and compress it with gzip + pg_dump -h "$HOST" -p "$PORT" -U "$USER" "$DB" | gzip > "$BACKUP_FILE" + else + echo "Invalid DUMP_FORMAT specified: $DUMP_FORMAT" + exit 1 + fi + + echo "Backup for database '$DB' created at '$BACKUP_FILE'" +done \ No newline at end of file