Add scripts/ pg_restore02.sh
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user