是否可以以基本模仿pg_dumpall
到单个输出文件的方式使用Npgsql而无需迭代数据库中的每个表?相反,我也希望能够采用这样的输出并使用Npgsql来恢复整个数据库。
我知道使用更新版本的Npgsql我可以使用BeginBinaryExport
,BeginTextExport
或BeginRawBinaryCopy
方法从数据库导出到STDOUT或文件。在该过程的另一端,我可以使用BeginBinaryImport
,BeginTextImport
或BeginRawBinaryCopy
方法从STDIN或现有文件导入。但是,从目前为止我能够找到的方法来看,这些方法使用COPY
SQL语法,其中(AFAIK)一次仅限于一个表。
为什么我会问这个问题? 我目前有一个旧的批处理文件,用于将生产数据库导出到文件中(使用pg_dumpall.exe
)在将其导回我的测试环境之前(使用psql.exe
with the <
operation)。现在已经有了很长一段时间,但是我们已经将服务器移动到异地托管环境,导致延迟阻止批处理文件成功完成。由于可能存在其他连接/超时问题,我正在考虑将批处理文件的功能移到.NET应用程序中,但这部分让我感到有点难过。
感谢您的帮助,如果您需要进一步澄清,请与我们联系。
答案 0 :(得分:1)
https://github.com/npgsql/npgsql/issues/1397已经要求这样做。
长话短说,Npgsql对转储/恢复整个数据库没有任何支持。实现这将是一项非常重要的工作,几乎会复制所有的pg_dump逻辑,并且存在微妙的遗漏和错误的危险将是相当大的。
如果您只需要为某些表转储数据,那么正如您所提到的,COPY API非常适合。但是,如果您还需要保存模式本身以及其他非表实体(序列状态,扩展...),那么唯一的当前选项AFAIK是将pg_dump作为外部进程执行({{3} })。