postgres 版本之间的 pg_dump 自定义格式

cir*_*cus 8 postgresql backup restore

我想知道自定义 pg_dump 格式在 Postgres 版本之间有多稳定。例如,我可以在 postgres 9.x 中恢复使用 Postgres 8.x 创建的自定义格式转储吗?

背景:

我正在构建一个虚拟设备,其中包含 PostgreSQL 数据库中的所有配置。我必须决定是使用 SQL 格式还是自定义格式进行备份。随着设备随着时间的推移(几年)不断发展,我将使用更新的 PostgreSQL 版本,并且仍然需要能够轻松恢复旧备份。

Cra*_*ein 13

根据我的经验,您可以使用 pg_dump 无需格式化来备份和恢复版本之间的数据库,而不会出现任何问题。这是使用 pg_dump 来简单地生成 SQL 文件时。

例子

pg_dump mydb > db.sql
Run Code Online (Sandbox Code Playgroud)

但是,当使用 -Fc 作为选项时

$ pg_dump -Fc mydb > db.dump
Run Code Online (Sandbox Code Playgroud)

您只能使用更高版本(即更新)的 PostgreSQL 版本恢复转储文件。因此,如果您使用 PostgreSQL 8.1 创建转储文件,则只能使用 pg_dump 从 8.1 或更新版本的 PostgreSQL 恢复相同的文件。

如果源服务器上存在相同的元素,那么目标服务器上可能还必须存在其他元素,例如 plpgsql 或 postgis。

这是Postgres 关于 pg_dump的文档

这是相关段落

因为 pg_dump 用于将数据传输到较新版本的 PostgreSQL,所以 pg_dump 的输出可以预期加载到比 pg_dump 版本更新的 PostgreSQL 服务器版本中。pg_dump 也可以从比它自己版本旧的 PostgreSQL 服务器转储。(目前,支持回到 7.0 版本的服务器。)但是,pg_dump 不能从比它自己的主要版本更新的 PostgreSQL 服务器转储;它甚至会拒绝尝试,而不是冒着进行无效转储的风险。此外,不能保证 pg_dump 的输出可以加载到旧主版本的服务器中——即使转储是从那个版本的服务器上获取的。将转储文件加载到旧服务器可能需要手动编辑转储文件以删除旧服务器不理解的语法。