dbgate-pg-dumper:无需 pg_dump 即可备份 PostgreSQL
Published: 2026-08-07 | Stela Augustínová
创建 PostgreSQL 备份通常需要使用 pg_dump 命令行工具。它必须单独安装,存在于系统路径中,并且要与 PostgreSQL 服务器兼容。这会使备份设置变得更加困难,尤其是在桌面应用程序和 Docker 容器中。
我们创建了 dbgate-pg-dumper,让这一切变得更简单。它是一个用 TypeScript 编写的 PostgreSQL 备份与还原引擎,可直接在 DbGate 或其他 Node.js 应用程序内部运行。无需外部的 pg_dump 或 psql 进程。
DbGate 内置的 PostgreSQL 备份功能
DbGate Community 版使用 dbgate-pg-dumper 作为其内置的 PostgreSQL 备份与还原选项。您可以直接在 DbGate 界面中创建纯 SQL 备份,而无需安装额外的 PostgreSQL 工具。
该转储工具同时包含数据库结构和表数据。它能够识别常见的 PostgreSQL 对象,例如表、列、索引、约束、序列、视图、函数、触发器、扩展、注释、所有权和权限。
DbGate Premium 版提供了更多控制选项,包括选择单个表以及指定目标 PostgreSQL 版本的功能。
专为大型数据库设计
该转储工具不会将整个数据库加载到内存中。表中的行是逐步读取和写入的,因此同一进程既能处理小型数据库,也能处理包含大量数据的表。
默认输出使用 PostgreSQL 高效的 COPY 格式。如果您更倾向于获得可读性更强或可移植性更好的 SQL 文件,也可以使用 INSERT 语句以及支持列名的 INSERT 语句。
在备份过程中,DbGate 可以显示当前阶段、已处理的表、行数、警告和错误信息。该操作也可以被安全地取消。
一致且兼容的备份
默认情况下,完整备份使用单个物理 PostgreSQL 连接,并在一个只读、可重复读(repeatable read)事务中读取结构和表数据。这提供了一致的 MVCC 快照,防止在数据库发生变化时,结构和表数据在不同时刻被读取到。禁用事务时,此保证不适用;使用现有事务时,其隔离级别由调用方控制。
当选择了目标 PostgreSQL 版本后,转储工具会检查导出的功能是否受该版本支持。如果存在不兼容的内容,它会根据所选设置报告明确的警告或停止操作。这在将数据库迁移到不同的 PostgreSQL 版本之间时非常有用。
纯 SQL 还原
dbgate-pg-dumper 可以还原它自己创建的 SQL 文件,也可以读取由 pg_dump --format=plain 生成的兼容纯 SQL 输出。
还原过程是逐步进行的,并会报告已完成的操作和已还原的行数。它能够正确处理 PostgreSQL 函数体、注释、带引号的标识符以及 COPY ... FROM STDIN 数据块。
当前的还原流程专注于 UTF-8 编码的纯 SQL 文件。该读取器不支持 PostgreSQL 的自定义(custom)、tar 和目录(directory)归档格式。
同时也提供 npm 包
尽管该转储工具是为 DbGate 而构建的,但它独立于应用程序的其他部分。Node.js 开发者可以安装公开的 dbgate-pg-dumper 软件包,并在自己的项目中使用其备份与还原 API。
该软件包同样适用于托管的 PostgreSQL 数据库。例如,您可以直接在 Node.js 应用程序中使用 dbgate-pg-dumper,创建 Neon 数据库备份,将其结构和数据保存为本地纯 SQL 文件,而无需安装 pg_dump。
版本 1.0.0 支持 ES 模块和 CommonJS,并要求 Node.js 20 或更高版本。其中包含了针对常用 pg 驱动程序的适配器,同时核心 API 也可以连接到其他 PostgreSQL 客户端。
借助 dbgate-pg-dumper,在桌面、服务器和 Docker 环境中运行 PostgreSQL 备份变得更加容易,同时备份仍以普通、可移植的 SQL 文件形式提供。