3

是否可以以基本上模仿单个输出文件的方式使用 Npgsql,pg_dumpall而不必遍历数据库中的每个表?相反,如果可能的话,我也希望能够获取这样的输出并使用 Npgsql 来恢复整个数据库。

我知道,对于更新版本的Npgsql ,我可以使用BeginBinaryExportBeginTextExportBeginRawBinaryCopy方法从数据库导出到 STDOUT 或文件。在流程的另一端,我可以使用BeginBinaryImportBeginTextImportBeginRawBinaryCopy方法从 STDIN 或现有文件导入。但是,就我目前所能找到的而言,这些方法使用COPYSQL 语法,该语法(AFAIK)一次仅限于一个表。

我为什么要问这个问题? 我目前有一个旧的批处理文件,用于将生产数据库导出到文件(使用pg_dumpall.exe),然后再将其导入我的测试环境(使用psql.exe操作<。这已经工作了很长一段时间了,但我们最近将服务器移动到了异地托管环境,这导致了延迟,导致批处理文件无法成功完成。由于其他连接/超时问题的可能性,我正在考虑将批处理文件的功能移动到 .NET 应用程序,但这部分让我有点难过。

感谢您的帮助,如果您需要任何进一步的说明,请告诉我。

4

1 回答 1

1

这已在https://github.com/npgsql/npgsql/issues/1397中提出要求。

长话短说,Npgsql 不支持转储/恢复整个数据库。实现这将是一项非常重要的工作,几乎会复制所有 pg_dump 逻辑,并且细微遗漏和错误的危险将是相当大的。

如果您只需要转储某些表的数据,那么正如您所提到的,COPY API 非常适合。但是,如果您还需要保存模式本身以及其他非表实体(序列状态、扩展...),那么 AFAIK 当前唯一的选择是将 pg_dump 作为外部进程执行(或使用其中之一其他备份/恢复选项)。

于 2018-04-18T08:21:19.440 回答