是否有可能以基本上模仿 pg_dumpall
的方式使用 Npgsql到单个输出文件而不必遍历数据库中的每个表?相反,如果可能的话,我也希望能够获取这样的输出并使用 Npgsql 来恢复整个数据库。
我知道使用更新版本的 Npgsql我可以使用 BeginBinaryExport
, BeginTextExport
, 或 BeginRawBinaryCopy
从数据库导出到 STDOUT 或文件的方法。在流程的另一端,我可以使用 BeginBinaryImport
, BeginTextImport
, 或 BeginRawBinaryCopy
从 STDIN 或现有文件导入的方法。然而,从我目前能够找到的内容来看,这些方法使用了 COPY
SQL 语法,(据我所知)一次仅限于一个表。
我为什么要问这个问题?我目前有一个旧的批处理文件,用于在导入之前将我的生产数据库导出到一个文件(使用 pg_dumpall.exe
)它回到我的测试环境(使用 psql.exe
with the <
operation )。这已经运行了很长一段时间,几乎没有问题,但我们最近将服务器移到了异地托管环境,这导致了延迟,导致批处理文件无法成功完成。由于其他连接/超时问题的可能性,我正在考虑将批处理文件的功能转移到 .NET 应用程序,但这部分让我有点难过。
感谢您的帮助,如果您需要任何进一步的说明,请告诉我。
最佳答案
这已在 https://github.com/npgsql/npgsql/issues/1397 中被要求.
长话短说,Npgsql 不支持转储/恢复整个数据库。实现这将是一项非常重要的工作,几乎会复制所有 pg_dump 逻辑,并且出现细微遗漏和错误的危险将是相当大的。
如果您只需要为某些表转储数据,那么正如您所提到的,COPY API 非常适合。但是,如果您还需要保存架构本身以及其他非表实体(序列状态、扩展...),那么目前唯一的选项 AFAIK 是将 pg_dump 作为外部进程执行(or use one of the other backup/restore options) .
关于vb.net - Npgsql 可以转储/恢复整个数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49866791/