すべてのプロダクト
Search
ドキュメントセンター

PolarDB:データベースオブジェクトの名前解決

最終更新日:May 30, 2024

SPLプログラム内のデータベースオブジェクトは、データベースオブジェクトの修飾名または非修飾名によって参照することができる。

修飾名はschema.nameの形式です。 このフォームでは、スキーマはスキーマの名前を指定します。 このスキーマには、識別子がnameであるデータベースオブジェクトが存在する。 修飾されていない名前にはスキーマがありません。 部分を作成します。 修飾名が参照されるとき、意図された特定のデータベースオブジェクトはあいまいになることはありません。 具体的には、データベースオブジェクトは指定されたスキーマに存在するか存在しません。

ただし、非修飾名を使用してオブジェクトを検索する場合は、現在のユーザーの検索パスを使用する必要があります。 ユーザーがセッションの現在のユーザーになると、デフォルトの検索パスは常にこのユーザーに関連付けられます。 検索パスはスキーマのリストで構成されます。 スキーマは、未修飾データベースオブジェクト参照を見つけるために左から右の順序で検索される。 オブジェクトが検索パスのスキーマで見つからない場合、オブジェクトは存在しません。 PSQLでSHOW search_pathコマンドを実行して、デフォルトの検索パスを表示できます。

polardb=# SHOW search_path;
   search_path
-----------------
 "$user", public
(1行) 

前の検索パスの $userは、現在のユーザーの一般的なプレースホルダーを指定します。 したがって、前のセッションの現在のユーザーがpolardbの場合、修飾されていないデータベースオブジェクトは、polardbとpublicのスキーマで検索されます。 polardbはパブリックよりも優先されます。

検索パスで修飾されていない名前が解決された後、システムは、現在のユーザーがこの特定のオブジェクトに対して必要な操作を実行する適切な権限を持っているかどうかを判断します。

説明 検索パスの概念は、Oracleデータベースと互換性がありません。 修飾されていない参照の場合、Oracleは指定されたデータベースオブジェクトの現在のユーザーのみのスキーマを検索します。 ユーザーとそのスキーマはOracleでは同じエンティティですが、ユーザーとスキーマはPolarDB for PostgreSQL (Compatible with Oracle) では2つの異なるオブジェクトです。