我有一个文件夹,其中包含许多*.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”语句:)
假设您的系统具有多个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,因为很难预测最佳值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句