oracle中支持對創建別名synonym,這個功能在某些場合十分有用。例如,當我們遷移數據庫的時候,如果碰到用戶名衝突的情況,我們可能只好將數據遷移到其它用戶下面,但是在程序中使用到數據庫裏對象的地方就要修改了,這個時候使用synonym便是一個不錯的選擇。
但是在pg中是不支持create synonym的語法的,不過我們也可以實現和oracle中同樣的功能。
例子:
oracle創建synonym:
SQL> select count(*) from t1;
COUNT(*)
----------
47
--切換用戶
SQL> conn basedba/basedba@itsmpdb1;
Connected.
--查詢報錯不存在
SQL> select count(*) from t1;
select count(*) from t1
*
ERROR at line 1:
ORA-00942: table or view does not exist
--創建synonym
SQL> create public synonym t1 for bosswg.t1;
Synonym created.
--查詢成功
SQL> select count(*) from t1;
COUNT(*)
----------
47
PostgreSQL實現:
–通過視圖
bill=# create table user1.t1(id int);
bill=# create view user2.t1 as select * from user1.t1;
–如果對象名沒變,只是在不同的schema下,使用search_path是最通用的方法
bill=# set search_path=user2,"$user",public;
SET
–如果是函數則使用函數嵌套即可,例如:
create or replace function user1.fun(int) returns int as $$
....
$$ language plpgsql strict;
修改成:
create or replace function user2.fun1(int) returns int as $$
select user1.fun($1);
$$ language sql strict;