我正在尝试将数据库从登台服务器复制到本地计算机上,但是遇到一些问题。这个功能在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_dump
和pg_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
然后使用以下命令卸载版本10
和11
:
$ sudo apt-get remove postgresql-10 postgresql-11
在那之后删除了集群:
$ sudo pg_dropcluster 10 main
$ sudo pg_dropcluster 11 main
然后注销并登录。
答案 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上运行