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

时间:2018-04-16 21:51:13

标签: vb.net npgsql pg-dumpall

是否可以以基本模仿pg_dumpall到单个输出文件的方式使用Npgsql而无需迭代数据库中的每个表?相反,我也希望能够采用这样的输出并使用Npgsql来恢复整个数据库。

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

为什么我会问这个问题? 我目前有一个旧的批处理文件,用于将生产数据库导出到文件中(使用pg_dumpall.exe)在将其导回我的测试环境之前(使用psql.exe with the < operation)。现在已经有了很长一段时间,但是我们已经将服务器移动到异地托管环境,导致延迟阻止批处理文件成功完成。由于可能存在其他连接/超时问题,我正在考虑将批处理文件的功能移到.NET应用程序中,但这部分让我感到有点难过。

感谢您的帮助,如果您需要进一步澄清,请与我们联系。

1 个答案:

答案 0 :(得分:1)

https://github.com/npgsql/npgsql/issues/1397已经要求这样做。

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

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