vb.net - Npgsql 可以转储/恢复整个数据库吗?

标签 vb.net npgsql pg-dumpall

是否有可能以基本上模仿 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/

相关文章:

vb.net - 检查自定义代码函数中的 NULL 日期

.net - VB.NET:具有公共(public) getter 和 protected setter 的属性

postgresql - 通过在 JSONB 列上应用过滤器来查询 postgresql 中的数据

c# - 批量复制 C# 到 PostgreSql

postgresql - pg_dumpall - Azure Database for PostgreSQL - 数据库 "azure_maintenance"的权限被拒绝

vb.net - MS 图表注释拒绝与鼠标位置对齐

.net - VB.Net 中的 WPF 标记扩展不起作用

c# - 使用自动增量将 csv 列复制到 postgresql

postgresql - pg_dumpall 不提示密码

linux - 如何在 Linux 上运行 pg_dump/pg_dumpall 命令?