#!/bin/bash DB_HOST="localhost" DB_PORT="5432" DB_USER="postgres" DB_OWNER="eds" DUMP_BASE_PATH="/pgbkp/20260730" # Списки баз source_db=("db01" "db02" "db03") temp_db=("temp_db01" "temp_db02" "temp_db03") # Создаем временные базы for i in "${!source_db[@]}"; do src="${source_db[$i]}" tmp="${temp_db[$i]}" echo "Creating: $tmp (from source $src)" psql -p "$DB_PORT" -U "$DB_USER" -c "DROP DATABASE IF EXISTS $tmp WITH (FORCE)" -q psql -p "$DB_PORT" -U "$DB_USER" -v ON_ERROR_STOP=1 << EOF CREATE DATABASE $tmp WITH OWNER = $DB_OWNER ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' ICU_LOCALE = 'en-US' LOCALE_PROVIDER = 'icu' TABLESPACE = pg_default CONNECTION LIMIT = -1 IS_TEMPLATE = False; ALTER DATABASE $tmp SET log_statement TO 'ddl'; EOF if [ $? -eq 0 ]; then echo "Database $tmp created with owner $DB_OWNER" else echo "Failed to create database $tmp" exit 1 fi done export PGPASSWORD="" # Восстанавливаем дампы for i in "${!source_db[@]}"; do src="${source_db[$i]}" tmp="${temp_db[$i]}" echo "Restoring: $src -> $tmp" # Примечание: оставлен суффикс _dir, как был в оригинале для формата -F d. # Если ваши папки называются просто по имени базы, замените ${src}_dir на ${src}. if pg_restore -h "$DB_HOST" -p "$DB_PORT" -U "$DB_OWNER" -d "$tmp" -F d -j 4 --no-owner --no-privileges --no-tablespaces "$DUMP_BASE_PATH/${src}_dir"; then echo "Restore $src to $tmp Done" else echo "Restore $src Failed" fi done echo "All done" unset PGPASSWORD