diff --git a/scripts/ pg_restore02.sh b/scripts/ pg_restore02.sh new file mode 100644 index 0000000..138a230 --- /dev/null +++ b/scripts/ pg_restore02.sh @@ -0,0 +1,66 @@ +#!/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 \ No newline at end of file