【问题标题】:Heroku restore from local database with pg:backups with "ERROR: must be owner of extension plpgsql"Heroku 使用 pg:backups 从本地数据库恢复“错误:必须是扩展 plpgsql 的所有者”
【发布时间】:2026-02-14 17:10:01
【问题描述】:

herehere 已经解决了这个问题,但我没有任何结果可以解决。

我正在按照 Heroku 文档中的要求使用备份。

pg_dump -Fc --no-acl --no-owner --no-privileges  -h [HOST] -U [DB_USER] [DB_NAME] > backup.dump

当我这样恢复时(文件大小约为 100MB):

heroku pg:backups --app [APP_NAME] restore 'https://[DUMP_URL]' [HEROKU_DATABASE_URL]

上传进度停止在 19.4MB 并记录状态后,我收到一条错误消息:

$ heroku pg:backups --app [APP_NAME] info r081
=== Backup info: r081
Database:    BACKUP
Started:     2016-04-29 10:10:37 +0000
Finished:    2016-04-29 10:11:31 +0000
Status:      Failed
Type:        Manual
Backup Size: 19.4MB
=== Backup Logs
2016-04-29 10:10:39 +0000: pg_restore: connecting to database for restore
2016-04-29 10:10:41 +0000: pg_restore: creating SCHEMA public
2016-04-29 10:10:41 +0000: pg_restore: creating EXTENSION plpgsql
2016-04-29 10:10:41 +0000: pg_restore: creating COMMENT EXTENSION plpgsql
2016-04-29 10:10:41 +0000: pg_restore: [archiver (db)] Error while PROCESSING TOC:
2016-04-29 10:10:41 +0000: pg_restore: [archiver (db)] Error from TOC entry 2474; 0 0 COMMENT EXTENSION plpgsql
2016-04-29 10:10:41 +0000: pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of extension plpgsql
2016-04-29 10:10:41 +0000: Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
2016-04-29 10:10:41 +0000: 
2016-04-29 10:10:41 +0000: 
2016-04-29 10:10:41 +0000: 
2016-04-29 10:10:41 +0000: pg_restore: creating SEQUENCE answer_seq
[...]
2016-04-29 10:10:48 +0000: pg_restore: executing SEQUENCE SET category_seq
2016-04-29 10:10:49 +0000: pg_restore: processing data for table "file"
2016-04-29 10:11:31 +0000: out of memory
2016-04-29 10:11:31 +0000: waiting for restore to complete
2016-04-29 10:11:31 +0000: restore done
2016-04-29 10:11:31 +0000: waiting for download to complete
2016-04-29 10:11:31 +0000: download done

我首先认为这可能是由于包含 BLOBS 的表文件。但我似乎无法理解为什么它应该是一个问题。最大的文件是 4MB。 日志还指出,仅导入了 100MB 中的 19.4。

我使用以下版本的 heroku 工具带:

heroku-toolbelt/3.43.0 (x86_64-linux-gnu) ruby/2.1.5
heroku-cli/4.30.0-2dfc0f4 (amd64-linux) go1.6.2
=== Installed Plugins
heroku-apps@2.0.3
heroku-cli-addons@0.3.0
heroku-fork@4.1.3
heroku-git@2.5.1
heroku-local@5.0.2
heroku-orgs@1.1.0
heroku-pg-extras
heroku-pipelines@1.1.5
heroku-run@3.2.3
heroku-spaces@2.1.2
heroku-status@2.1.4

【问题讨论】:

  • 在进行手动转储、恢复之前,您是否尝试过使用pg:push?如果这也不起作用,我目前能想到的唯一解决方法是在默认的纯文本模式下转储并在恢复之前手动删除有问题的语句。
  • 转储是本地的,但原始数据库位于我无法执行 Heroku 工具带的环境中。据我了解,pg:push 依赖于这样一个事实,即数据库是本地的,我无法指定远程主机。
  • 这对我来说也很合适。如何在本地恢复转储,然后运行pg:push?如果您在本地恢复过程中遇到同样的问题,this answer 应该可以解决您的问题。
  • 我实际上更喜欢理解,而不仅仅是解决问题。不过还是谢谢你。
  • 接近的 pg:push 有效,但我仍然不知道为什么从转储中恢复不起作用。我之前已经成功完成了很多次。

标签: postgresql heroku


【解决方案1】:

我想我的database plan was not big enough 支持这个操作。我可以排除 heroku FAQ 中声明的其他问题

【讨论】:

    最近更新 更多