ここで概説するように、私は最近、データベース移行プロセスを実行しました。
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: エラー: リレーションの許可が拒否されました
それを修正するために何をすべきかについてのアイデアはありますか?
同様の問題がありましたが、根本的な原因は、アプリが古い開発データベースを指していて、制限の 10,000 行を超えていたことです。
新しい基本データベースを作成してすべてをバックアップしましたが、アプリはまだ古い開発データベースを指していました。
heroku pg:info
行を確認してください: 10300/10000 (問題があります)
1)より多くの行を含む新しいDBを作成します
(基本または「本番」のもの-> Herokuはより多くのお金を稼ぐためにアップグレードを強制しているようですerrrrrr)
2)pgbackupsを使用して古いDBをバックアップします:heroku pg:backups:capture SMALL_DB_NAME
3)バックアップをに復元します新しい DB: heroku pg:backups:restore BACKUP_ID BIG_DB_NAME
(詳細については、以下のリンクを参照してください)
4) 新しい DB をアプリのプライマリに昇格させます。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
更新:アシュトンの答えは、この状況でそれを釘付けにします。これは非常にHeroku特有のものです。PostgreSQL のエラー メッセージまたは問題を検索してこれを見つけたが、 Heroku を使用していない場合は、状況に当てはまる他の質問を探してください。
おそらく、接続している PostgreSQL ユーザー ID はテーブルの所有者ではなく、テーブルへのGRANT
アクセスを許可する明示的なステートメントを発行していません。移行時に実行したものを正確に確認しないと、それ以上のことを言うのは困難です。とにかく、Heroku は内部の多くを隠しています。
現在の状況がどのようなものかを調べてみましょう。接続しpsql
て実行してみてください:
\dp the_problem_table
報告された権限を表示します。次の結果も表示します。
SHOW current_user;
psql
アプリケーション内から SQL クエリとして実行する場合。
質問を編集して、その情報と、表示されるエラー メッセージの正確な全文を追加します。
Dev (10k 行の制限) から Basic (10M 行の制限) にアップグレードするための Ashton の回答に基づく手順
データベース行が制限を超えていることを確認してください
heroku pg:info
アプリとワーカーを無効にして、データベースのアップグレード中にデータベースが変更されないようにします
heroku maintenance:on
heroku ps:scale worker=0
pgbackups がない場合
heroku addons:add pgbackups
データベースをバックアップし、バックアップ ID を取得する
heroku pg:backups:capture
Web インターフェイスで db を追加する
heroku config を表示すると、新しい db 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
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 の間違ったユーザー名にありました。
行数の制限を超えた状況にありました。
この回答は、各テーブルの行数をリストする方法を説明しました: http ://stackoverflow.com/questions/12701711/heroku-row-count-incorrect
知ることは非常に価値があります。
ターミナルから psql コンソールに入ることができます。接続設定は、アプリの heroku ダッシュボードに一覧表示されます。