PostgreSQL上的同义词支持

时间:2017-07-21 13:10:14

标签: sql postgresql

如何在Oracle中创建和使用PostgreSQL上的同义词。我是否需要创建一些数据库链接或其他任何东西。我在这个主题上找不到任何好的官方文件。

修改1

实际上,截至目前,我有一个应用程序,它有两个独立的模块,可以连接两个不同的oracle数据库;一个模块需要访问其他模块,因此我们在oracle中使用db link上的同义词。现在我们正在将应用程序迁移到postgresql,所以我们需要同义词。

编辑2 当我说两个不同的oracle数据库时,它意味着它可以是两个不同的oracle实例或同一个db的两个模式,它可以在应用程序中配置,应用程序必须支持这两种模式。

PostgreSQL版本:9.6.3

3 个答案:

答案 0 :(得分:3)

方法1: -

最后,我使用外部数据包装器postgres_fdw工作,如下所示 我有两个名为dba和dbb的数据库。 dbb有一个表用户,我需要在dba中访问它

CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', dbname 'dbb', port '5432');



CREATE USER MAPPING FOR postgres  
SERVER myserver  
OPTIONS (user 'user', password 'password'); 

CREATE FOREIGN TABLE users (  
username char(1))
SERVER myserver  
OPTIONS (schema_name 'public', table_name 'users'); 

CREATE FOREIGN TABLE users (users char(1));

现在我可以在dba中执行所有选择/更新查询。

方法2: - 可以通过在同一个db中创建两个模式来实现,下面是步骤:

  1. 创建两个模式ex app_schema,common_schema。
  2. 授予访问权限:

    GRANT CREATE,USAGE ON SCHEMA app_schema TO myuser;
    GRANT CREATE,USAGE ON SCHEMA common_schema TO myuser;
    
  3. 现在将用户的搜索路径设置为

    alter user myuser set search_path to app_schema,common_schema;
    
  4. 现在,myuse可以看到common_schema中的表格。例如,假设我们在common_schema中有一个表用户,在app_schema中有一个表应用程序,那么下面的查询将很容易运行:

    select * from user;
    select * from app;
    

    这类似于oracle中的同义词。

    注意 - 以上查询将使用PostgreSQL 9.5.3 +

答案 1 :(得分:1)

我认为你不需要在Postgres中使用Oracle中的同义词,因为与Oracle不同,Postgres中的用户和架构之间有明显的区别。这不是一个1:1的关系,多个用户可以轻松使用多个模式,而无需通过利用Postgres的“搜索路径”功能完全限定对象 - ^(?:/\w+)*/ps/app/ui/res/(.*)$

答案 2 :(得分:1)

如果这些表也应该在PostgreSQL中的不同数据库中,那么你可以使用外部数据包装器创建一个外表。

如果您使用Oracle同义词只是为了避免编写atable@dblink,那么您不必在PostgreSQL中执行任何操作,因为外表的外观和感觉就像PostgreSQL中的本地表一样。

如果您将同义词用于其他目的,则可以将search_path设置为包含目标表所在的架构,也可以创建一个只从目标表中选择所有内容的简单视图。