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;