PostgreSQL創建synonym(兼容oracle)

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;  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章