シノニムは、データベースオブジェクトの代替名を提供するオブジェクトです。 シノニムを使用すると、スキーマ名とオブジェクト名を含むオブジェクトの完全修飾名を使用する必要なく、オブジェクトを参照できます。 シノニムを使用して、データベースオブジェクトを簡略化して参照できます。 たとえば、SQL文で完全修飾オブジェクト名が必要なシナリオでは、シノニムを使用できます。
PolarDB for PostgreSQL (Compatible with Oracle) クラスターでは、次のオブジェクトのシノニムを設定できます。
テーブル
ビュー
具体化されたビュー
シーケンス
手順
関数
カスタムタイプ
パッケージ
データベースリンクを使用してアクセスできるオブジェクト
参照されるスキーマまたはオブジェクトは、シノニムの作成時に存在するか、存在しない場合があります。 シノニムは、存在しないオブジェクトまたはスキーマを参照する場合があります。 参照されているオブジェクトまたはスキーマを削除すると、シノニムは無効になります。 シノニムを削除するには、明示的に削除する必要があります。
他のスキーマオブジェクトと同様に、PolarDB for PostgreSQL (Compatible with Oracle) は検索パスを使用して、修飾されていないシノニム名を解決します。 同じ名前のシノニムが2つある場合、シノニムへの非修飾参照は、検索パスで指定された名前の最初のシノニムに解決されます。 publicが検索パスにある場合は、名前を修飾する必要なしにスキーマ内のシノニムを参照できます。
PolarDB for PostgreSQL (Compatible with Oracle) クラスターがシノニムを使用するSQLステートメントを実行すると、現在のユーザーの権限は、シノニムの基になるデータベースオブジェクトに基づいてチェックされます。 ユーザーがオブジェクトに対して必要な権限を持っていない場合、SQL文は実行されません。
シノニムの作成
シノニムを作成するには、create synonymステートメントを実行します。 構文:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]syn_name
FOR object_schema.object_name[@dblink_name];表 1. Parameters
パラメーター | 説明 |
syn_name | シノニムの名前 シノニム名は、スキーマ内で一意である必要があります。 |
schema | シノニムが作成されるスキーマの名前。 スキーマ名を指定しない場合は、シノニムは検索パスの最初の既存のスキーマに作成されます。 |
object_name | シノニムが作成されるオブジェクトの名前。 |
object_schema | オブジェクトが存在するスキーマの名前。 |
dblink_name | データベースリンクの名前。 データベースリンクを使用してオブジェクトにアクセスする場合は、このパラメーターを設定します。 |
既存のシノニムを新しいシノニムに置き換えるには、ステートメントでreplace句を使用します。
public schemaにシノニムを作成するには、ステートメントでPUBLIC句を使用します。 Oracleデータベースと互換性のあるCREATE PUBLIC SYNONYMステートメントは、パブリック・スキーマにシノニムを作成します。 構文:
CREATE [OR REPLACE] PUBLIC SYNONYM syn_name FOR object_schema.object_name;省略形の構文:
CREATE [OR REPLACE] SYNONYM public.syn_name FOR object_schema.object_name;次の例では、polardb.empテーブルを参照するためにpersonnelという名前のシノニムが作成されています。
CREATE SYNONYM personnel FOR polardb.emp;CREATE synonymステートメントでシノニムがスキーマ修飾されていない限り、シノニムは検索パスの最初の既存のスキーマに作成されます。 次の文を実行すると、検索パスを表示できます。
SHOW SEARCH_PATH;
search_path
-----------------------
development,accounting
(1 row)この例では、development という名前のスキーマが存在しない場合、accounting という名前のスキーマにシノニムが作成されます。
polardbスキーマのempテーブルは、人事シノニムを使用して、任意のDDLまたはDML SQL文で参照できます。
INSERT INTO personnel VALUES (8142,'ANDERSON','CLERK',7902,'17-DEC-06',1300,NULL,20);
SELECT * FROM personnel;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+----------+-----------+------+--------------------+---------+---------+--------
7369 | SMITH | CLERK | 7902 | 17-DEC-80 00:00:00 | 800.00 | | 20
7499 | ALLEN | SALESMAN | 7698 | 20-FEB-81 00:00:00 | 1600.00 | 300.00 | 30
7521 | WARD | SALESMAN | 7698 | 22-FEB-81 00:00:00 | 1250.00 | 500.00 | 30
7566 | JONES | MANAGER | 7839 | 02-APR-81 00:00:00 | 2975.00 | | 20
7654 | MARTIN | SALESMAN | 7698 | 28-SEP-81 00:00:00 | 1250.00 | 1400.00 | 30
7698 | BLAKE | MANAGER | 7839 | 01-MAY-81 00:00:00 | 2850.00 | | 30
7782 | CLARK | MANAGER | 7839 | 09-JUN-81 00:00:00 | 2450.00 | | 10
7788 | SCOTT | ANALYST | 7566 | 19-APR-87 00:00:00 | 3000.00 | | 20
7839 | KING | PRESIDENT | | 17-NOV-81 00:00:00 | 5000.00 | | 10
7844 | TURNER | SALESMAN | 7698 | 08-SEP-81 00:00:00 | 1500.00 | 0.00 | 30
7876 | ADAMS | CLERK | 7788 | 23-MAY-87 00:00:00 | 1100.00 | | 20
7900 | JAMES | CLERK | 7698 | 03-DEC-81 00:00:00 | 950.00 | | 30
7902 | FORD | ANALYST | 7566 | 03-DEC-81 00:00:00 | 3000.00 | | 20
7934 | MILLER | CLERK | 7782 | 23-JAN-82 00:00:00 | 1300.00 | | 10
8142 | ANDERSON | CLERK | 7902 | 17-DEC-06 00:00:00 | 1300.00 | | 20
(15 rows)シノニムを削除する
シノニムを削除するには、DROP synonymステートメントを実行します。 構文:
DROP [PUBLIC] SYNONYM [schema.]syn_name表 2. Parameters
パラメーター | 説明 |
syn_name | シノニムの名前 シノニム名は、スキーマ内で一意である必要があります。 |
schema | シノニムが作成されるスキーマの名前。 |
スキーマ修飾できる他のオブジェクトと同様に、検索パスに同じ名前の2つのシノニムを作成できます。 削除するシノニムを区別するには、スキーマ名を含めます。 DROP synonymステートメントでシノニムがスキーマ修飾されていない場合、PolarDB for PostgreSQL (Compatible with Oracle) クラスターは検索パスで見つかったシノニムの最初のインスタンスを削除します。
パブリックスキーマからシノニムを削除するには、ステートメントにpublic句を含めます。 Oracleデータベースと互換性のあるDROP PUBLIC SYNONYMステートメントは、パブリック・スキーマからシノニムを削除します。 構文:
DROP PUBLIC SYNONYM syn_name;次の例では、personnelという名前のシノニムが削除されています。
DROP SYNONYM personnel;