Npgsql dump/restore 可以是整个数据库吗?

Can Npgsql dump/restore an entire database?

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

我知道 Npgsql I can use the BeginBinaryExport, BeginTextExport, or BeginRawBinaryCopy methods to export from the database to STDOUT or to a file. On the other side of the process, I can use the BeginBinaryImport, BeginTextImport, or BeginRawBinaryCopy methods to import from STDIN or an existing file. However, from what I've been able to find so far, these methods use the COPY SQL 语法的更新版本,(据我所知)一次只能使用一个 table。

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

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

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

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

如果您只需要转储一些 table 的数据,那么正如您提到的那样,COPY API 非常适合。但是,如果您还需要保存架构本身以及其他非 table 实体(序列状态、扩展...),那么目前唯一的选项 AFAIK 是执行 pg_dump 作为外部进程 (or use one of the other backup/restore options).