我的开发机器(称之为 D)运行 PostgreSQL 9.4.5。我的生产机器(称之为 P)运行 PostgreSQL 8.4.20。
我不使用 PostgreSQL 9.x 中的任何新功能或类型。
有时我需要在 D 上镜像 P 的状态,有时我需要做相反的事情。在这两种情况下我都使用 pg_dump/pg_restore。
当我从 P 转储恢复到 D 时,我从未遇到过任何错误或警告。但是,当我执行相反的操作时,我会得到多个unrecognized configuration parameter "lock_timeout"
错误。我知道这个配置参数是在 9.3 中引入的,并且由于恢复过程的其余部分工作正常,我只是忽略错误消息。
我的问题是:跨不同主要版本使用 pg_dump/pg_restore 是一个坏主意吗?还是可以安全地忽略兼容性错误,就像我在这里所做的那样?我以后还会被这个咬吗?我无法升级 P,为了安全起见,我是否应该将 D 降级到 8.4.20?
正如 PostgreSQL 文档 (https://www.postgresql.org/docs/14/app-pgdump.html https://www.postgresql.org/docs/14/app-pgdump.html) says:
由于 pg_dump 用于将数据传输到较新版本的 PostgreSQL,因此 pg_dump 的输出预计会加载到比 pg_dump 版本更新的 PostgreSQL 服务器版本中。 pg_dump 还可以从比其自身版本更旧的 PostgreSQL 服务器转储。 (目前,支持版本 8.0 的服务器。)但是,pg_dump 无法从比其主要版本更新的 PostgreSQL 服务器转储;它甚至会拒绝尝试,而不是冒险进行无效转储。另外,不保证 pg_dump 的输出可以加载到旧主要版本的服务器中 — 即使转储是从该版本的服务器中获取的。
因此,对于其他对此仍存疑问的人来说,不能保证从 PostgreSQL 服务器较新版本中,您对旧版本有 100% 的工作输出。但相反,效果会很好。
建议使用生产服务器,即使与开发服务器不同,至少也比它更新。
关于忽略兼容性错误:
将转储文件加载到旧服务器中可能需要手动编辑转储文件以删除旧服务器无法理解的语法。在跨版本情况下,建议使用 --quote-all-identifiers 选项,因为它可以防止不同 PostgreSQL 版本中不同的保留字列表引起的问题。
最后的建议是,如果您计划延长软件的使用寿命,请始终考虑升级,因为旧版本有一天会被弃用。当提出这个问题时,PgSQL 8 仍然有版本。现在您只有 9.6 版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)