Improve usage of pg_dump in backup

This commit is contained in:
Tobias Reisinger 2026-02-01 20:33:25 +01:00
parent 731647be9d
commit f7936633e5
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
3 changed files with 13 additions and 14 deletions

View file

@ -7,4 +7,5 @@ if [ "$2" != "before" ]; then
fi fi
cd /opt/services/immich || exit cd /opt/services/immich || exit
docker compose exec database sh -c 'pg_dump -U "$DB_USERNAME" "$DB_DATABASE"' | gzip >"$backup_path/immich.sql.gz"
docker compose exec database sh -c 'pg_dump -U "$DB_USERNAME" -Fc -C -Zzstd:5 "$DB_DATABASE"' >"$backup_path/immich.dump"

View file

@ -1,20 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
cd "$1"
if [ "$2" != "before" ]; then if [ "$2" != "before" ]; then
exit 0 exit 0
fi fi
cd "$1"
sudo rm -r "$1"/*.dump || true
sudo chown postgres:postgres "$1"
postgres_tables=$(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false;") postgres_tables=$(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false;")
for i in $postgres_tables for i in $postgres_tables
do do
printf "dumping %s ..." "$i" printf "dumping %s ..." "$i"
sudo -u postgres pg_dump "$i" | gzip >"pg_dump_$i.sql.gz" sudo -u postgres pg_dump -Fd -C -Zzstd:5 -j2 -f"pg_dump_$i.dump" "$i"
echo " done" echo " done"
done done
echo -n "dumping all ..."
sudo -u postgres pg_dumpall | gzip >"pg_dumpall.sql.gz"
echo " done"

View file

@ -3,10 +3,11 @@
set -e set -e
target="$1" target="$1"
recovery_file="pg_dumpall.sql.gz" if [ -z "$target" ]; then
if [ -n "$target" ]; then echo "No target given!"
recovery_file="pg_dump_$target.sql.gz" exit 1
fi fi
recovery_file="pg_dump_$target.dump"
tmp_dir=$(mktemp -d) tmp_dir=$(mktemp -d)
recovery_file_path="$tmp_dir/opt/services/_backup/postgresql/$recovery_file" recovery_file_path="$tmp_dir/opt/services/_backup/postgresql/$recovery_file"
@ -20,9 +21,7 @@ echo "Backup restored."
echo "Recovery file: $recovery_file" echo "Recovery file: $recovery_file"
echo "Restoring database..." echo "Restoring database..."
cat "$recovery_file_path" \ sudo -u postgres pg_restore -C "$recovery_file_path"
| gunzip \
| sudo -u postgres psql
echo "Database restored." echo "Database restored."
echo "Removing temporary files..." echo "Removing temporary files..."