PostgreSQL创建synonym(兼容oracle)
oracle中支持对创建别名synonym,这个功能在某些场合十分有用。例如,当我们迁移数据库的时候,如果碰到用户名冲突的情况,我们可能只好将数据迁移到其它用户下面,但是在程序中使用到数据库里对象的地方就要修改了,这个时候使用synonym便是一个不错的选择。但是在pg中是不支持create synonym的语法的,不过我们也可以实现和oracle中同样的功能。例子:oracle创建synonym
·
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;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)