PGError:错误:关联权限被拒绝(使用Heroku时)


76

我最近完成了数据库迁移过程,如下所示:

https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres

现在,我在日志中看到许多错误,如下所示:

PGError:错误:关联权限被拒绝

关于如何解决该问题的任何想法?


我有同样的事情。我在Heroku上删除了数据库中的行,不得不等待几分钟,然后它允许我迁移数据库
slindsey3000 2009年

Answers:


163

我有一个类似的问题,但根本原因是我的应用程序指向的旧开发数据库超出了它的10,000行的限制。

尽管我创建了一个新的Basic数据库并备份了所有内容,但该应用程序仍指向旧的dev数据库。

heroku pg:info

检查以查看行:10300/10000(然后您遇到问题)

您将需要

1)创建具有更多行的新数据库(基本行或“生产”行-> Heroku似乎正在强制进行升级以赚更多的钱errrrrr)

2)使用pgbackups备份旧数据库:heroku pg:backups:capture SMALL_DB_NAME

3)将备份还原到新的数据库:(heroku pg:backups:restore BACKUP_ID BIG_DB_NAME请参阅下面的链接以获取更多详细信息)

4)将新的数据库升级为应用程序的主数据库:heroku pg:promote BIG_DB_NAME

可以始终利用:

heroku maintenance:on (以在更新时禁用该应用程序)


heroku maintenance:off


heroku pg:info (检查状态)

如果这是问题,您可能需要检查一下:https : //devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database -to-heroku-postgres


1
感谢Ashton-运行所有这些都再次完美。
suttree 2012年

矿山说:行:57845/10000(写访问权被撤销)
carbonr

是的,那将使您超出限制。看来您将必须升级,希望这些说明对您有所帮助!
阿什顿·托马斯

谢谢..你救了我的工作!
马里奥·卡瓦略


11

更新:在这种情况下,阿什顿(Ashton)的答案很明确,这是Heroku特有的。如果您是通过搜索PostgreSQL错误消息或问题而发现的,但未使用Heroku,请寻找其他更可能适用于您的情况的问题。


猜测一下,您要连接的PostgreSQL用户ID不是表的所有者,并且您没有发布任何明确的GRANT语句来授予它访问它们的权限。迁移时没有完全看到自己的运行情况,很难说更多-而且Heroku仍然隐藏了许多内部结构。

让我们弄清楚当前的情况。尝试连接psql并运行:

\dp the_problem_table

并显示报告的蠕变。同时显示以下结果:

SHOW current_user;

psql应用程序内部运行以及作为SQL查询运行。

编辑您的问题以添加该信息以及您收到的错误消息的完整,准确的文本


Heroku的不允许其分贝低级访问
МалъСкрылевъ

@МалъСкрылевъ...,这里没有什么是“低级”
Craig Ringer

psql在这方面,低级
МалъСкрылевъ

@МалъСкрылевъ那你是不正确的。您可以使用来直接连接到Heroku数据库psql。简单的方法是,heroku pg:psql但是您也可以psql直接使用从heroku获得的数据库连接字符串来使用。
Craig Ringer 2015年

然后,您的答案不完整,不要覆盖这个问题。因为它没有给出有关如何在heroku上访问psql的答案。
МалъСкрылевъ

10

基于Ashton的答案的步骤,从Dev(限制为1万行)升级到Basic(限制为1000万行)

检查数据库行超出限制

heroku pg:info

禁用应用程序和工作程序,以确保在数据库升级期间没有数据库更改

heroku maintenance:on
heroku ps:scale worker=0

如果没有pgbackups

heroku addons:add pgbackups

备份数据库并获取备份ID

heroku pg:backups:capture

通过Web界面添加数据库

  1. 登录到https://addons.heroku.com
  2. 搜索“ Heroku Postgres”
  3. 选择计划和应用
  4. 添加它

查看heroku配置,您应该看到新的数据库URL

heroku config --remote heroku

将备份还原到新数据库

heroku pg:backups:restore BACKUP_ID NEW_DB_URL

更改DATABASE_URL

heroku pg:promote NEW_DB_URL

启用应用程序和工作人员

heroku maintenance:off
heroku ps:scale worker=1

也许值得一提的是,命令已从heroku更改pgbackups:capture为heroku pg:backups:capture。请注意pg:backups
Roshan

6

删除多余的行后,您将不会立即获得插入特权。在这种情况下,请删除多余的行,然后再运行heroku pg:info。这将刷新数据库的特权,您将在几分钟后恢复访问权限。无需将现有数据库克隆到新数据库中并将新数据库设置为应用程序的数据库。

$ heroku pg:info

=== HEROKU_POSTGRESQL_BRONZE_URL, DATABASE_URL
Plan:        Hobby-dev
Status:      Available
Connections: 3/20
PG Version:  9.3.6
Created:     2014-03-01 13:47 UTC
Data Size:   1.25 GB
Tables:      4
Rows:        2098/10000 (Write access revoked) - refreshing
Fork/Follow: Unsupported
Rollback:    Unsupported
Add-on:      grinning-busily-5587

1
非常感谢!它有帮助。还有更多要添加的内容:我必须添加param --app = APP_NAME,因为DB已连接到Heroku上的特定应用程序。
PokatilovArt

@PokatilovArt高兴它帮助
manish_s


2

我在Redmine应用程序中遇到了类似的问题:

PG::InsufficientPrivilege: ERROR:  permission denied for relation settings
: SELECT  "settings".* FROM "settings"  WHERE "settings"."name" = 'plugin_redmine_wktime' LIMIT 1

我的步骤是:

  1. 我备份了旧的Redmine应用程序和数据库。
  2. 我部署了新版本的Redmine-效果很好
  3. 我将旧的Redmine恢复为开发服务器,但尝试访问主网页时出现错误。

我的问题的原因只是旧Redmine的config / database.yml中的用户名错误

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.