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)より多くの行を含む新しい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

于 2012-08-13T14:04:11.207 に答える
11

更新:アシュトンの答えは、この状況でそれを釘付けにします。これは非常にHeroku特有のものです。PostgreSQL のエラー メッセージまたは問題を検索してこれを見つけたが、 Heroku を使用していない場合は、状況に当てはまる他の質問を探してください。


おそらく、接続している PostgreSQL ユーザー ID はテーブルの所有者ではなく、テーブルへのGRANTアクセスを許可する明示的なステートメントを発行していません。移行時に実行したものを正確に確認しないと、それ以上のことを言うのは困難です。とにかく、Heroku は内部の多くを隠しています。

現在の状況がどのようなものかを調べてみましょう。接続しpsqlて実行してみてください:

\dp the_problem_table

報告された権限を表示します。次の結果も表示します。

SHOW current_user;

psqlアプリケーション内から SQL クエリとして実行する場合。

質問を編集して、その情報と、表示されるエラー メッセージの正確な全文を追加します。

于 2012-08-13T11:39:15.057 に答える
10

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 を追加する

  1. https://addons.heroku.comにログインします
  2. 「Heroku Postgres」で検索
  3. プランとアプリケーションを選択
  4. それを追加

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
于 2014-04-30T11:10:28.803 に答える
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 を開発サーバーとして復元したところ、メインの Web ページにアクセスしようとするとエラーが発生しました。

私の問題の原因は、古い Redmine の config/database.yml の間違ったユーザー名にありました。

于 2013-11-20T16:24:40.637 に答える
2

行数の制限を超えた状況にありました。

この回答は、各テーブルの行数をリストする方法を説明しました: http ://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

知ることは非常に価値があります。

ターミナルから psql コンソールに入ることができます。接続設定は、アプリの heroku ダッシュボードに一覧表示されます。

于 2012-10-18T21:35:34.793 に答える