私は最近、ここに概説されているデータベース移行プロセスを経験しました。
https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres
今、私はこのようなログにいくつかのエラーを見ています:
PGError:エラー:リレーションの許可が拒否されました
私はそれを修正するために何をすべきかについてのアイデアはありますか?
私は同様の問題を抱えていましたが、根本的な原因は私のアプリが10,000行の制限を超えていた古いdevデータベースを指していることでした。
新しい基本データベースを作成し、すべてをバックアップしましたが、アプリはまだ古い開発データベースを指していました。
heroku pg:info
行を確認してください:10300/10000(それから問題があります)
あなたがする必要があります
1)行を増やして新しいDBを作成します(基本または「本番」行-> Herokuは、より多くのお金を稼ぐためにアップグレードを強制しているようです)
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-tierhttps://devcenter.heroku。 com/articles/migrating-from-shared-database-to-heroku-postgres
更新:アシュトンの答えは、このような状況にそれを釘付けにします。これは非常にHeroku固有です。 PostgreSQLエラーメッセージまたは問題の検索でこれを見つけたが、Herokuを使用してnotである場合は、状況に当てはまる可能性が高い他の質問を探してください。
推測では、接続先のPostgreSQLユーザーIDはテーブルの所有者ではなく、テーブルへのアクセスを許可する明示的なGRANT
ステートメントを発行していません。 exactlyを見たことがなければ、移行したときに実行したものを言うことは難しく、Herokuは内部の多くを非表示にします。
現在の状況を把握しましょう。 psql
で接続して実行してみてください:
\dp the_problem_table
報告された権限を表示します。次の結果も表示します。
SHOW current_user;
psql
から実行し、アプリケーション内からSQLクエリとして実行する場合。
質問を編集して、その情報とエラーメッセージの完全な正確なテキストを追加します。
Dev(10k行の制限)からBasic(10M行の制限)にアップグレードするAshtonの回答に基づく手順
db行の制限を確認
heroku pg:info
アプリとワーカーを無効にして、データベースのアップグレード中にデータベースが変更されないようにします
heroku maintenance:on
heroku ps:scale worker=0
pgbackupがない場合
heroku addons:add pgbackups
データベースのバックアップとバックアップIDの取得
heroku pg:backups:capture
webインターフェイスでデータベースを追加する
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
余分な行を削除した後、すぐに挿入特権を取り戻すことはできません。その場合、余分な行を削除して、heroku pg:info
を実行します。これにより、DBの権限が更新され、数分でアクセスが回復します。既存のデータベースを新しいデータベースに複製し、新しいデータベースをアプリのデータベースとして設定する必要はありません。
$ 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の間違ったユーザー名にありました。