Enterprise Postgresのロールやリレーションが未存在、パスワード認証に失敗のエラーについて

Enterprise Postgres の技術情報はこちら

Enterprise Postgresで、以下のようなエラーになりました。原因と対処方法を教えてください。
  • role "xxx" does not exist
  • relation "xxx" does not exist
  • password authentication failed for user "xxx"
[原因]
SQLコマンドに指定したロール名やテーブル名、パスワードなどの識別子に英大文字が含まれ、その識別子が二重引用符で囲まれていないことが原因である場合があります。
Enterprise Postgresは、二重引用符で囲まれていない識別子に指定された英大文字は、英小文字として扱う仕様です。この仕様により、英大文字で定義されているロール名やテーブル名、パスワードと一致せず、未存在エラーやパスワード認証に失敗したエラーになった可能性があります。

例えば、CREATE ROLEでロールを作成する際、二重引用符で囲んで『”Joe”』と指定したとします。
 CREATE ROLE “Joe”
その後、GRANTにより、『Joe』に対してテーブル(myschema.products)にすべての権限を付与する際、以下のように、二重引用符で囲まずに『Joe』を指定すると、ロール名には『joe』が指定されたと解釈されるため、「role "joe" does not exist」のエラーになります。
 GRANT ALL ON myschema.products to Joe

[対処方法]
SQLコマンドに指定した識別子内の英大文字を、指定どおり英大文字として扱いたい場合は、識別子を二重引用符で囲んでください。
 例) GRANT ALL ON myschema.products to "Joe"

詳細は以下のマニュアルを参照してください。
FUJITSU Software Enterprise Postgres 14
 PostgreSQL 14.0 Documentation
  Part II. The SQL Language
   Chapter 4. SQL Syntax
    4.1. Lexical Structure
     4.1.1. Identifiers and Key Words

なお、上記以外の製品バージョン/レベルについては、該当するマニュアル箇所を参照してください。
製品・サービス情報
対象製品Enterprise Postgres
プラットフォームWindows,Solaris,Linux
アンサー種別 設計/開発
このページの先頭へ