我有一个包含许多*.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”语句:)
两个选项:使用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的各种水平进行试验。