postgresql - 使 pg_dump 目标为旧版本 pg_restore 的语法

标签 postgresql heroku

我在 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 进行升级。这会将 psqlpg_dumppg_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/

相关文章:

python - 我怎样才能避免这种竞争情况?

c - PostgreSQL 错误 : The program can't start because libpq. 您的计算机缺少 dll

SQL + 具有不同行集的内部选择

python - ValueError at/(未设置所需的参数名称)

ruby-on-rails - 使用 active_admin 进行 Heroku 部署

sql - Postgresql 单引号转义

sql - 使用来自自身的值更新 PostgreSQL 表

python - Heroku Procfile 不进入目录?

ruby-on-rails - Ruby on Rails bootsy + cloudinary 上传图片麻烦

mysql - 在本地 mysql 数据库中拉取 mysql 数据库时出错