我在 Heroku 上使用了一个 postgres 12 数据库,并且在我的 macOS 工作站上安装了 postgres 11。当我尝试恢复 Heroku 提供给我的文件时,我得到
$ pg_restore --verbose --no-owner -h localhost -d myapp_development latest-heroku.dump
pg_restore: [archiver] unsupported version (1.14) in file header
根据Heroku's documentation ,他们听起来唯一的选择是,如果 Heroku 用户想要在本地访问他们的数据,他们必须运行 postgres 12?这看起来很愚蠢。
深入研究Postgres docs on this topic ,他们说:
pg_dump can also dump from PostgreSQL servers older than its own version. (Currently, servers back to version 8.0 are supported.)
这听起来似乎应该可以指定 pg_restore
的目标版本供 pg_dump
使用?但互联网上似乎没有任何地方有这样的实际例子。包括 postgres 文档本身,它们没有提供有关用于定位“将版本转回版本 8.0”的语法的任何线索。
有人曾经设法使用随 postgres 11 安装的 pg_restore
从随 postgres 12 安装的 pg_dump
导入转储吗?
最佳答案
我发现的最佳答案是通过 brew update libpq
进行升级。这会将 psql
、pg_dump
和 pg_restore
升级到最新版本(要链接它们,我必须使用 brew link --force libpq
)。升级完成后,我就可以从 heroku 上的 postgres 12 数据库转储,并在本地导入到我的 postgres 11 数据库中。我认为我可能需要转储到原始 SQL 才能正常工作,但幸运的是,基于 pg-12 的 pg_restore 能够毫无问题地导入到我的 postgres 11 数据库中。
关于postgresql - 使 pg_dump 目标为旧版本 pg_restore 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63911087/