我有我的postgres数据库备份,整个数据库实例在每晚的备份中都有。是否可以从该备份中恢复一个数据库?或者,如果我想访问单个数据库(进行迁移或恢复),是否需要更改我的数据库备份方案以执行单个转储?
我有我的postgres数据库备份,整个数据库实例在每晚的备份中都有。是否可以从该备份中恢复一个数据库?或者,如果我想访问单个数据库(进行迁移或恢复),是否需要更改我的数据库备份方案以执行单个转储?
awk '/^\\connect database_name/ {flag=1;print;next}
/^\\connect/ {flag=0}
flag { print }' \
< all_databases.sql \
> database_name.sql
\connect database_name
"和下一个"\connect
"之间的所有内容。但效率不高。# Dumping global data (for example roles)
pg_dumpall -g > /var/lib/pgsql/backups/globals.sql
#Dumping indidual databases in tar (uncompressed binary) format
for dbname in
`
psql -qXtc "
select datname from pg_catalog.pg_database
where datname<>'template0'" template1
`
do
pg_dump -b -F t "$dbname" > "/var/lib/pgsql/backups/$dbname.dump"
done
是的,如果你的备份是"由pg_dump在非纯文本格式之一中创建的归档文件",请使用"--schema="选项来pg_restore
。
另一方面,我不确定你在这里使用了正确的术语 - 你把数据库集群称为"整个数据库实例";在解释中你询问"数据库",但在标题中你写了"模式"等等。
编辑: 现在,在经过一些思考之后,我相信你有一个集群备份,是用"pg_dumpall
"创建的。 "pg_dumpall"仅创建纯文本(SQL命令)备份。在这种情况下,不可能只恢复一个数据库(或一个数据库中的一个模式)。
那么是的,你需要更改备份程序,使用非纯文本格式备份各个数据库(--format=custom是推荐的格式)。
事实上,我在我的DB服务器上使用的备份程序就是这样做的。