Files
psql_tasks/scripts/ pg_restore02.sh
T

66 lines
1.8 KiB
Bash
Raw Normal View History

2026-08-07 18:11:24 +08:00
#!/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