我最近完成了数据库迁移过程,如下所示:
https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres
现在,我在日志中看到许多错误,如下所示:
PGError:错误:关联权限被拒绝
关于如何解决该问题的任何想法?
我最近完成了数据库迁移过程,如下所示:
https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres
现在,我在日志中看到许多错误,如下所示:
PGError:错误:关联权限被拒绝
关于如何解决该问题的任何想法?
Answers:
我有一个类似的问题,但根本原因是我的应用程序指向的旧开发数据库超出了它的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
更新:在这种情况下,阿什顿(Ashton)的答案很明确,这是Heroku特有的。如果您是通过搜索PostgreSQL错误消息或问题而发现的,但未使用Heroku,请寻找其他更可能适用于您的情况的问题。
猜测一下,您要连接的PostgreSQL用户ID不是表的所有者,并且您没有发布任何明确的GRANT
语句来授予它访问它们的权限。迁移时没有完全看到自己的运行情况,很难说更多-而且Heroku仍然隐藏了许多内部结构。
让我们弄清楚当前的情况。尝试连接psql
并运行:
\dp the_problem_table
并显示报告的蠕变。同时显示以下结果:
SHOW current_user;
从psql
应用程序内部运行以及作为SQL查询运行。
编辑您的问题以添加该信息以及您收到的错误消息的完整,准确的文本。
psql
在这方面,低级
psql
。简单的方法是,heroku pg:psql
但是您也可以psql
直接使用从heroku获得的数据库连接字符串来使用。
基于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界面添加数据库
查看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
pgbackups:capture
为heroku pg:backups:capture
。请注意pg:backups
删除多余的行后,您将不会立即获得插入特权。在这种情况下,请删除多余的行,然后再运行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
我处于超出行数限制的情况。
此答案说明了如何列出每个表中的行数:http : //stackoverflow.com/questions/12701711/heroku-row-count-incorrect
知道非常有价值。
您可以通过终端进入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中的用户名错误