如何将备份文件大量导入到Postgresql数据库中

问题描述 投票:0回答:1

我有一个包含许多*.backup文件的文件夹,这些文件将被导入到Postgresql数据库中。我创建了一个bash脚本来做到这一点:

#!/usr/bin/env sh

echo "Importing data..."

psql -h $DB_HOST -p $DB_PORT -U $DB_USER -c "DROP DATABASE IF EXISTS $DB_DATABASE;"
psql -h $DB_HOST -p $DB_PORT -U $DB_USER -c "CREATE DATABASE $DB_DATABASE;"

cd /App/data/backup

for f in *.backup; do
    echo "- $f"
    pg_restore -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_DATABASE -v "$f"
done

cd -
exit 0

是否有更容易/更快的方法?是否可以大量导入文件?

注意:此脚本在docker中运行。不用担心“ drop database”语句:)

bash postgresql
1个回答
0
投票
假设您的系统有多个CPU,则可以通过并行运行导入来提高速度。由于pg_restore通常是磁盘绑定进程-收益将受到限制。网络性能也将产生重大影响。

两个选项:使用pg_restore -j,并并行处理多个文件:

pg_restore的多个作业

for f in *.backup; do echo "- $f" pg_restore -j4 -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_DATABASE -v "$f" done

并行还原多个备份文件:

ls *.backup | xargs -P4 -I{} pg_restore -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_DATABASE -v "{}"

由于难以预测最佳值,因此您想使用-P的各种水平进行试验。
© www.soinside.com 2019 - 2024. All rights reserved.