78

我最近完成了此处概述的数据库迁移过程:

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

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

PGError:错误:关系的权限被拒绝

关于我应该做些什么来解决它的任何想法?

4

6 回答 6

166

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

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

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

于 2012-08-13T14:04:11.207 回答
11

更新:Ashton 的回答在这种情况下非常准确,这是 Heroku 特有的。如果您在搜索 PostgreSQL 错误消息或问题时发现了这一点,但没有使用 Heroku,请寻找更可能适用于您的情况的其他问题。


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

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

\dp the_problem_table

并显示报告的权限。还显示以下结果:

SHOW current_user;

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

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

于 2012-08-13T11:39:15.057 回答
10

基于 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

使用 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
于 2014-04-30T11:10:28.803 回答
7

删除多余的行后,您不会立即恢复插入权限。在这种情况下,删除多余的行,然后运行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
于 2015-09-05T03:52:03.517 回答
2

我处于超出行数限制的情况。

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

很有价值知道。

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

于 2012-10-18T21:35:34.793 回答
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 中的用户名错误

于 2013-11-20T16:24:40.637 回答