首页 > 解决方案 > 如何为PostgreSQL创建一个恢复时不失败的只读备份用户

问题描述

几天来,我一直在尝试创建一个只能在我的 PostgreSQL 数据库中备份的只读用户。我用来调用 pg_dump 的方法是一个 .bat 文件,下面是下面的示例,我将如何在我的应用程序中实现它。

cxMemo1.Clear;
cxMemo1.Lines.Add('@Echo off ');
cxMemo1.Lines.Add('set PGUSER=backup');
cxMemo1.Lines.Add('set PGPASSWORD=backup');
cxMemo1.Lines.Add('c:');
cxMemo1.Lines.Add('cd C:\Program Files (x86)\PostgreSQL\10\bin\ ');
cxMemo1.Lines.Add('@echo "Loading..." ');
cxMemo1.Lines.Add('pg_dump.exe -h localhost -F custom -p 5432  -f ' +Path+ ' BDFOCOG');

cxMemo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) +'backup.bat');
ShellExecute(Application.Handle, nil, PChar('backup.bat'), nil, nil, SW_HIDE);

在图像 1 中,我尝试在使用只读的 postgres 超级用户进行备份后进行恢复,但数据已创建并且发生了此错误。

图片1

如何解决此问题以从我的数据库备份进行干净还原?

编辑 1 - 图 2 显示了当我使用 pg_restore 进行恢复时发生的错误,备份用户的 default_transection_read_only 属性设置为 true,错误指向数据库何时恢复外键以及其他更改。

图片2

编辑2 - 值得注意的是数据传输成功,所有这些数据和银行显然都在正常工作,我担心它可能损坏了一些数据,因为根据PostgreSql和pg_restore恢复没有成功。

标签: postgresql

解决方案


推荐阅读