postgresql:未实现跨数据库引用:

时间:2018-08-10 10:52:45

标签: mysql postgresql inner-join

我正在尝试将SQL内部联接查询转换为PostgreSQL内部联接查询。在此内部联接查询中,正在使用哪些表,即所有表都不在一个数据库中。我们将表格分为两个数据库,即应用程序数据库和安全性数据库<​​/ p>

  1. 用户和权限表位于安全数据库
  2. 用户程序和部门位于应用程序数据库中

我尝试过以下操作,但出现以下错误

错误

ERROR:  cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4:         INNER JOIN "Rockefeller_ApplicationDb".public.userro..

SQL存储功能

SELECT   Department.nDeptID 
    FROM Users INNER JOIN Permission 
         ON Users.nUserID = Permission.nUserID INNER JOIN UserRoleMapping
         ON Users.nUserID = UserRoleMapping.nUserID INNER JOIN Department
         ON Permission.nDeptInst = Department.nInstID
         AND  Department.nInstID = 60
    WHERE     
         Users.nUserID = 3;

PostgreSQL存储功能

SELECT dep.ndept_id 
        FROM "Rockefeller_SecurityDb".public.users as  u 
        INNER JOIN  "Rockefeller_SecurityDb".public.permissions p ON u.nuser_id = p.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.userrolemapping as urm ON u.nuser_id = urm.nuser_id
        INNER JOIN "Rockefeller_ApplicationDb".public.department dep ON p.ndept_inst = dep.ninst_id
           AND  dep.ninst_id = 60
                        WHERE     
                            u.nuser_id = 3;

2 个答案:

答案 0 :(得分:2)

您不能联接来自不同数据库的表。

在设计上,PostgreSQL在逻辑上将数据库分开。

如果要联接表,则应将它们放在一个数据库中的不同架构中,而不是放在不同的数据库中。

请注意,在MySQL中所谓的“数据库”在标准SQL中称为“模式”。

如果您确实需要连接来自其他数据库的表,则需要使用外部数据包装器。

答案 1 :(得分:0)

对于将来的搜索,您可以使用dblink连接到其他数据库。

遵循命令:

create extension dblink;

SELECT dblink_connect('otherdb','host=localhost port=5432 dbname=otherdb user=postgres password=???? options=-csearch_path=');

SELECT * FROM dblink('otherdb', 'select field1, field2 from public.tablex')
AS t(field1 text, field2 text);