Database PGError:错误:关系的权限被拒绝(使用Heroku时)
我最近经历了如下所述的数据库迁移过程: 现在我在日志中看到了一些错误,如下所示: PGError:错误:关系的权限被拒绝Database PGError:错误:关系的权限被拒绝(使用Heroku时),database,postgresql,heroku,permissions,Database,Postgresql,Heroku,Permissions,我最近经历了如下所述的数据库迁移过程: 现在我在日志中看到了一些错误,如下所示: PGError:错误:关系的权限被拒绝 我该怎么做才能修复它?更新:阿什顿的回答将它固定在这种情况下,这是非常具体的。如果您在搜索PostgreSQL错误消息或问题时发现此问题,但未使用Heroku,请查找其他更适合您情况的问题 据猜测,您连接的PostgreSQL用户ID不是表的所有者,并且您没有发出任何显式的GRANT语句来授予它对表的访问权限。在没有看到迁移时运行的具体内容的情况下,很难说得更多——而且H
我该怎么做才能修复它?更新:阿什顿的回答将它固定在这种情况下,这是非常具体的。如果您在搜索PostgreSQL错误消息或问题时发现此问题,但未使用Heroku,请查找其他更适合您情况的问题
据猜测,您连接的PostgreSQL用户ID不是表的所有者,并且您没有发出任何显式的
GRANT
语句来授予它对表的访问权限。在没有看到迁移时运行的具体内容的情况下,很难说得更多——而且Heroku隐藏了许多内部内容
让我们了解一下目前的情况。尝试连接psql
并运行:
\dp the_problem_table
并显示报告的许可。还显示以下结果:
SHOW current_user;
从psql
运行,并从应用程序内部作为SQL查询运行
编辑您的问题,以添加该信息以及您收到的错误消息的完整、准确文本。我也有类似的问题,但根本原因是我的应用程序指向旧的开发人员数据库,该数据库超出了10000行的限制 虽然我创建了一个新的基本数据库并备份了所有内容,但应用程序仍然指向旧的开发数据库
heroku pg:info
检查以查看行:10300/10000(那么您就有问题了)
您将需要1) 创建包含更多行的新数据库(基本行或“生产”行->Heroku似乎正在强制升级以赚取更多的钱errrrrrr)
2) 使用pgbackups备份旧数据库:
heroku pg:backups:capture SMALL_DB_NAME
3) 将备份还原到新数据库:
heroku pg:backups:restore backup\u ID BIG\u DB\u NAME
(有关详细信息,请参阅下面的链接)4) 将新数据库升级到应用程序的主数据库:
heroku pg:PROMOTE BIG\u DB\u NAME
始终可以利用:
heroku维护:开启
(在更新时禁用应用程序)
heroku维护:关闭
heroku pg:info(检查状态) 如果这是问题所在,您可能需要检查:
我遇到了超出行数限制的情况 此答案解释了如何列出每个表中的行数: 非常值得知道
您可以通过终端进入psql控制台,连接设置列在您的应用程序的heroku仪表板上 我的Redmine应用程序也有类似的问题:
PG::InsufficientPrivilege: ERROR: permission denied for relation settings
: SELECT "settings".* FROM "settings" WHERE "settings"."name" = 'plugin_redmine_wktime' LIMIT 1
我的步骤是:
我的问题的原因是旧Redmine的config/database.yml步骤中的用户名错误,这是基于Ashton从Dev(10k行限制)升级到Basic(10M行限制)的回答 检查超出限制的数据库行
heroku pg:info
禁用应用程序和工作程序,以确保在数据库升级期间不会更改数据库
heroku maintenance:on
heroku ps:scale worker=0
如果你没有备份
heroku addons:add pgbackups
备份数据库并获取备份id
heroku pg:backups:capture
使用web界面添加数据库
heroku config --remote heroku
将备份恢复到新数据库
heroku pg:backups:restore BACKUP_ID NEW_DB_URL
更改数据库URL
heroku pg:promote NEW_DB_URL
启用应用程序和工作人员
heroku maintenance:off
heroku ps:scale worker=1
删除额外的行后,您将无法立即恢复插入权限。在这种情况下,删除多余的行,然后运行
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
感谢Ashton-再次运行所有这些操作非常有效。我的回答是:行:57845/10000(写访问被撤销)是的,这会让你超出限制。看来你必须升级了,我希望这些说明会有所帮助!谢谢你救了我的饭碗@AugustinRiedinger根据Heroku的说法,您必须等待大约30分钟,因为它不允许低级别访问其db@МаъСаъъ。。。这里没有什么是“低水平的”
psql
,在这种情况下,低水平@МаъСаъъъ那么你是不正确的。您可以使用psql
直接连接到Heroku数据库。简单的方法是heroku pg:psql
,但您也可以直接使用从heroku获得的数据库连接字符串使用psql
。然后您的答案不完整,并且不涉及问题。因为它没有给出如何在heroku上访问psql的答案。我也有同样的问题。我在Heroku上删除了数据库中的行,需要等待几分钟,然后它允许我迁移DBMaybe。值得一提的是,命令已从Herokupgbackups:capture
更改为Herokupg:backups:capture
。请注意pg:backups
之间的分号,非常感谢!这有帮助。还要添加的内容:我必须添加param--app=app_NAME,因为DB连接到我Heroku上的特定应用程序。@PokatilovArt很高兴这有帮助