PGError:错误:关系被拒绝(使用Heroku时)

时间:2012-08-13 08:56:46

标签: database postgresql heroku permissions

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

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

现在我在日志中看到了许多错误:

PGError:错误:关系被拒绝

关于我应该采取什么措施来解决它?

6 个答案:

答案 0 :(得分:160)

我遇到了类似的问题,但根本原因是我的应用程序指向旧的dev数据库,该数据库超出了10,000行的限制。

虽然我创建了一个新的Basic数据库并备份了所有内容,但应用程序仍指向旧的开发数据库。

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 :(得分:11)

更新:Ashton的回答指出了这种情况,这是Heroku特有的。如果您是通过搜索PostgreSQL错误消息或问题找到此信息,但使用Heroku ,请查找更有可能适用于您的情况的其他问题。


猜测,您正在连接的PostgreSQL用户ID不是表的所有者,并且您没有发出任何明确的GRANT语句来授予它访问权限。如果没有看到完全你在迁移时运行的内容很难说 - 而且Heroku无论如何都隐藏了许多内部。

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

\dp the_problem_table

并显示报告的permisions。同时显示结果:

SHOW current_user;

psql运行,并从应用程序内部作为SQL查询运行。

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

答案 2 :(得分:9)

基于Ashton从Dev(10k行限制)升级到Basic(10M行限制)的答案的步骤

检查数据库行超出限制

heroku pg:info

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

heroku maintenance:on
heroku ps:scale worker=0

如果你没有pgbackups

heroku addons:add pgbackups

备份数据库并获取备份ID

heroku pg:backups:capture

使用网络界面添加数据库

  1. 登录https://addons.heroku.com
  2. 搜索“Heroku Postgres”
  3. 选择计划和申请
  4. 添加
  5. 查看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
    

答案 3 :(得分:5)

删除额外的行后,您不会立即获得插入权限。在这种情况下,删除额外的行,然后运行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

答案 4 :(得分:2)

我遇到了超出行数限制的情况。

这个答案解释了如何列出每个表中的行数: http://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

非常有价值的知道。

您可以通过终端进入psql控制台,连接设置列在您的应用程序的heroku仪表板上!

答案 5 :(得分: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作为开发服务器,我收到了一个错误 当我试图访问主网页时。
  4. 我的问题的原因只是旧Redmine的config / database.yml

    中的用户名错误