Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 未实现跨数据库引用:_Postgresql - Fatal编程技术网

Postgresql 未实现跨数据库引用:

Postgresql 未实现跨数据库引用:,postgresql,Postgresql,我正在尝试将SQL内部联接查询转换为PostgreSQL内部联接查询。在此内部联接查询中,哪些表正在使用,而不是所有表都存在于一个数据库中。我们将表分为两个数据库,即应用数据库和安全数据库 安全数据库中存在用户和权限表 应用程序数据库中存在用户角色映射和部门 我试着像下面一样,但我得到以下错误 错误 ERROR: cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolema

我正在尝试将SQL内部联接查询转换为PostgreSQL内部联接查询。在此内部联接查询中,哪些表正在使用,而不是所有表都存在于一个数据库中。我们将表分为两个数据库,即应用数据库和安全数据库

  • 安全数据库中存在用户和权限表
  • 应用程序数据库中存在用户角色映射和部门
  • 我试着像下面一样,但我得到以下错误

    错误

    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;
    
    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;
    
    PostgreSQL存储函数

    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;
    
    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;
    

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

    数据库在PostgreSQL中按设计进行逻辑分隔

    如果要联接这些表,应该将它们放在一个数据库中的不同模式中,而不是放在不同的数据库中

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


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

    对于将来的搜索,可以使用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);
    

    你是说我们不能连接两个不同数据库中的两个表。若它是一个db和两个不同的模式,那个么我们可以执行连接,但需求是两个分开的db和连接。没有办法改变需求。如果客户太固执而听不进好的建议,请使用带有postgres_fdw的外来表。@springuser在mysql中也没有办法做到这一点。哇。我总是在同一台服务器上进行跨数据库连接!我很震惊mysql和postgres不允许这样做。