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