同義字是一個標識符,可在SQL語句中用於引用其他資料庫物件。在資料庫物件通常需要按schema名稱進行完全限定才能在SQL語句中正確引用的情況下,同義字十分有用。為該對象定義的同義字簡化了對單個非限定名稱的引用。
PolarDB PostgreSQL版(相容Oracle)支援以下對象的同義字:
表
視圖
具體化檢視
序列
過程
函數
自訂類型
包
可通過database link訪問的對象
建立同義字時,引用的schema或引用的對象不必非得存在;同義字可引用不存在的對象或schema。如果您刪除引用的對象或schema,同義字將變得無效。您必須顯式刪除同義字才能將其移除。
與任何其他schema對象一樣,PolarDB PostgreSQL版(相容Oracle)使用搜尋路徑來解析非限定的同義字名稱。如果您有兩個同名的同義字,則對同義字的非限定引用將解析為搜尋路徑中具有給定名稱的第一個同義字。如果public位於搜尋路徑中,您可以引用該 schema 中的同義字而無需限定該名稱。
當PolarDB PostgreSQL版(相容Oracle)執行SQL命令時,將根據同義字的基礎資料庫物件檢查目前使用者的特權;如果使用者沒有該對象的適當許可權,SQL命令將失敗。
建立同義字
使用 CREATESYNONYM 命令建立同義字。文法如下:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]syn_name
FOR object_schema.object_name[@dblink_name];表 1. 參數
參數 | 說明 |
syn_name | syn_name是同義字的名稱。同義字名稱在schema中必須是唯一的。 |
schema | schema指定同義字所在schema的名稱。如果未指定schema名稱,則在搜尋路徑中的第一個現有schema中建立同義字。 |
object_name | Object_name指定對象的名稱。 |
object_schema | Object_schema指定對象所在的schema的名稱。 |
dblink_name | Dblink_name指定可通過其訪問目標對象的database link的名稱。 |
包括 REPLACE 子句,以將現有同義字定義替換為新的同義字定義。
包括 PUBLIC 子句,以在 public schema 中建立同義字。與Oracle資料庫相容的 CREATE PUBLIC SYNONYM 命令會建立一個位於public schema中的同義字:
CREATE [OR REPLACE] PUBLIC SYNONYM syn_name FOR object_schema.object_name;以下只是一種簡寫方式:
CREATE [OR REPLACE] SYNONYM public.syn_name FOR object_schema.object_name;以下樣本建立一個名為personnel的同義字,它引用polardb.emp表。
CREATE SYNONYM personnel FOR polardb.emp;除非同義字在 CREATE SYNONYM 命令中是schema限定的,否則將在搜尋路徑的第一個現有schema中建立它。您可以通過執行以下命令,查看搜尋路徑:
SHOW SEARCH_PATH;
search_path
-----------------------
development,accounting
(1 row)在此樣本中,如果名為development的schema不存在,則將在名為accounting的schema中建立同義字。
現在,通過使用同義字personnel,可在任何SQL語句(DDL或DML)中引用 polardb schema 中的emp表:
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. 參數
參數 | 說明 |
syn_name | syn_name是同義字的名稱。同義字名稱在schema中必須是唯一的。 |
schema | schema指定同義字所在的schema的名稱。 |
與可由schema限定的任何其他對象一樣,您可在搜尋路徑中包含兩個同名的同義字。為區別您要刪除的同義字的名稱,請包含schema名稱。除非在 DROP SYNONYM 命令中使用schema限定同義字,否則PolarDB PostgreSQL版(相容Oracle)會刪除在搜尋路徑中找到的第一個同義字執行個體。
您可以選擇包含 PUBLIC 子句以刪除 public schema 中的同義字。與Oracle資料庫相容的 DROP PUBLIC SYNONYM 命令會刪除位元於 public schema 中的同義字:
DROP PUBLIC SYNONYM syn_name;以下樣本會刪除同義字personnel:
DROP SYNONYM personnel;