Npgsql 可以转储/恢复整个数据库吗?



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

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

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

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

这在 https://github.com/npgsql/npgsql/issues/1397 中是要求的。

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

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

最新更新