在Heroku上运行pg:pull时出现pg_restore错误1

时间:2020-06-22 09:05:43

标签: postgresql heroku

我正在尝试将数据库从登台服务器复制到本地计算机上,但是遇到一些问题。这个功能在2个月前完美无缺地工作了,当我今天再次尝试使用它时,我遇到了问题。

我正在使用以下命令:

heroku pg:pull DATABASE_URL my_app_db -a myApp

在日志末尾,我得到了:

pg_dump: reading subscriptions
pg_dump: reading large objects
pg_dump: reading dependency data
pg_dump: saving encoding = UTF8
pg_dump: saving standard_conforming_strings = on
pg_dump: saving search_path = 
pg_dump: saving database definition
pg_restore: [archiver] unsupported version (1.14) in file header
pg_dump: dumping contents of table "public.addresses"
 ▸    pg_restore errored with 1

我尝试更新我的postgresql软件包,但在Heroku和本地计算机上它们是相同的:

$ psql --version
psql (PostgreSQL) 12.3 (Ubuntu 12.3-1.pgdg18.04+1)
$ heroku run psql --version -a myApp
Running psql --version on ⬢ myApp... up, run.5796 (Hobby)
psql (PostgreSQL) 12.3 (Ubuntu 12.3-1.pgdg18.04+1)

在执行提取操作之前,我总是将本地数据库删除:

$ psql postgres
postgres=# DROP DATABASE my_app_db;
postgres=# \q

更新1:

好像我的pg_dumppg_pull版本不匹配:

$ pg_dump --version
pg_dump (PostgreSQL) 10.13 (Ubuntu 10.13-1.pgdg18.04+1)
$ heroku run pg_dump --version -a myApp
pg_dump (PostgreSQL) 12.3 (Ubuntu 12.3-1.pgdg18.04+1)
$ pg_restore --version
pg_restore (PostgreSQL) 10.13 (Ubuntu 10.13-1.pgdg18.04+1)
$ heroku run pg_restore --version -a myApp
pg_restore (PostgreSQL) 12.3 (Ubuntu 12.3-1.pgdg18.04+1)

我在网上看到的是应该通过安装最新的postgresql对其进行更新。由于某些原因,即使使用最新的PostgreSQL版本,它们中的两个也没有更新。

解决此问题的解决方案:

正如clemoun所指出的,我必须运行多个psql版本。我看到了我拥有的东西:

$ pg_lsclusters

然后使用以下命令卸载版本1011

$ sudo apt-get remove postgresql-10 postgresql-11

在那之后删除了集群:

$ sudo pg_dropcluster 10 main
$ sudo pg_dropcluster 11 main

然后注销并登录。

1 个答案:

答案 0 :(得分:1)

您同时拥有的事实:

$ psql --version
psql (PostgreSQL) 12.3 (Ubuntu 12.3-1.pgdg18.04+1)

$ pg_restore --version
pg_restore (PostgreSQL) 10.13 (Ubuntu 10.13-1.pgdg18.04+1)

让我认为您的计算机上安装了多个版本的PostgreSQL。

尝试输入:

sudo find /usr -wholename '*/bin/postgres'

,您可能会发现同时安装了PostgreSQL版本10.13和12.3。 出于某种原因,它运行的是pg_restore的10.13版本,Heroku要求您使用10.3以上的版本 =>您的12.3版本应该可以解决问题

尝试卸载Postgresql的10.13版,使您的计算机仅具有12.3版。因此pg_restore将在版本12.3上运行