role does not existの対処法

冒頭まとめ PostgreSQLでSQLの実行やデータベースの復元を行ったとき、次のエラーが出ることがあります。 ERROR: role "app_user" does not exist app_userというロールを参照しましたが、接続先のPostgreSQLクラスタにその名前のロールがありません。GRANT ... TO app_user、ALTER TABLE ... OWNER TO app_user、SET ROLE app_user、ダンプの復元など、どの操作から発生したかによって直す場所は変わります。 まず、エラー直前のSQLと接続先を確認してください。接続できるロールで対象クラスタに入り、次のSQLでロールの存在を調べます。 SELECT rolname, rolcanlogin FROM pg_roles WHERE rolname = 'app_user'; 結果が0行で、必要なロールなら適切な権限を持つ利用者が作成します。別名のロールへ移行する設計なら、SQLや復元時の所有者指定を見直します。必要のないロールをエラーを消すためだけに作ると、意図しない所有者や権限を残すことがあります。 role does not existとは PostgreSQLのロールはクラスタ全体で共有されます。pg_rolesはロールの情報を参照できるビューで、パスワードを隠したpg_authidの内容を表示します。データベースに接続できているなら、公式のpg_rolesの説明に従い、このビューで対象名を確認できます。 ERROR: role "..." does not existは、すでに接続したセッションで、存在しないロール名をSQLが参照したときの一つの表示です。SQLSTATEは42704(undefined_object)です。PostgreSQL本体のget_role_oid()など、ロール名を解決する処理で発生します。 ただし、role "..." does not existという文字列だけで接続後のエラーと決めることはできません。接続時に存在しない利用者を指定した場合、認証方式などによってはFATAL: role "..." does not existと表示されます。先頭がERRORかFATALか、接続が成立したかを先に確認してください。 どのSQLがロールを参照したか確認する 同じエラー文でも、直前に実行したSQLによって原因が異なります。 エラーが出た操作 最初に確認するもの GRANT ... TO app_user、REVOKE ... FROM app_user 権限の対象として指定したロールと作成順序 ALTER TABLE ... OWNER TO app_user 移行先の所有者名 CREATE DATABASE ... OWNER app_user 作成先クラスタのロール SET ROLE app_user アプリケーションが切り替えようとしているロール pg_restore、psql -f ダンプ内の所有者、権限、ロール設定 まず、実行されたSQLに書かれた名前の大文字・小文字や引用符を確認します。PostgreSQLでは引用符を付けない識別子は小文字へ変換されます。たとえばapp_userと"App_User"は異なる名前です。識別子の公式仕様も参照してください。 ...

2026年9月28日 · ErrorLog