如何验证由pg_dump归档生成的归档文件是否正确和有效?

6
我正在备份/还原PostgreSQL数据,使用pg_dump.exepg_restore.exe。为了恢复备份文件,我必须删除数据库中的实际表,如果转储文件有问题,这可能是一项“自杀式任务”。我可以使用(例如)“7z t mydump.gz”检查转储文件的完整性,这是我喜欢的第一个测试。
但是,我想知道,因为这个存档是原始PG存档,PostgreSQL是否包含任何技术来检查这个“.gz”存档,我可以在删除实际表之前采取?
如果有,如何进行适当的检查?
编辑:这是我的转储实际命令:

"C:\Program Files (x86)\PostgreSQL\9.1\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --no-password --verbose -F t --file "C:\Users\User 1\Desktop\mydatabase.gz" "mydatabase"


1
实际上,至少在测试时,您可以重命名数据库而不是清空它。 - Michał Politowski
1个回答

7

你似乎正在尝试验证你刚刚创建的PostgreSQL转储文件的有效性和正确性。

你理解上的关键误解是你不必将转储文件恢复到创建它的同一数据库中。你可以将其恢复到同一群集上的另一个数据库中,或者为了更加谨慎,在另一个群集(服务器)上的数据库中。验证已经无错误地还原了转储文件,并且数据符合您的预期。

为了更加谨慎,停止PostgreSQL服务器并复制数据目录中的文件。这样,您也有了一个文件级别的备份。请注意,仅可以通过使用相同平台,相同选项以及使用相同主要版本(8.1/8.2/...)的PostgreSQL构建的另一台Windows x64主机来读取PostgreSQL数据目录的文件级别副本 - 因此,如果数据目录来自Windows x64上的9.2.x,则只能被安装了9.2.x的另一台Windows x64主机读取。

如果您担心原始数据库,那么您可能没有备份。这是一个至关重要的问题。您需要去紧急阅读关于备份和还原的文档章节,并制定一个良好的自动化备份计划。看看barman

在问题编辑后更新

-F t是一个奇怪的选择;通常更合理的选择是纯SQL转储或-F c

你生成的文件不是.gz(gzip压缩)文件,而是tar档案文件,没有被压缩。它可以被提取成一个充满SQL文件的目录。

要测试它,请使用pg_restore将其还原到使用createdbCREATE DATABASE命令创建的新空数据库中。


嗨,Craig。我只将表转储/恢复到现有且为空的数据库中。现在你可以看到我的命令行。 - Wine Too

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接