web-dev-qa-db-ja.com

postgresql:データベース間の参照は実装されていません:

SQL内部結合クエリをPostgreSQL内部結合クエリに変換しようとしています。この内部結合クエリでは、すべてのテーブルが1つのデータベースに存在しないことをどのテーブルが使用していますか。テーブルを2つのデータベース、つまりアプリケーションデータベースとセキュリティデータベースに分割しました

  1. ユーザーと権限テーブルはセキュリティデータベースに存在します
  2. userrolemappingとdepartmentは、アプリケーションdbに存在します

私は以下のようにしようとしましたが、次のエラーが発生しています

エラー

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

異なるデータベースのテーブルを結合することはできません。

PostgreSQLでは、データベースは設計により論理的に分離されています。

テーブルを結合する場合は、テーブルを異なるデータベースではなく、1つのデータベースの異なるスキーマに配置する必要があります。

MySQLで「データベース」と呼ばれるものは、標準SQLでは「スキーマ」と呼ばれることに注意してください。

異なるデータベースのテーブルを本当に結合する必要がある場合は、外部データラッパーを使用する必要があります。

8
Laurenz Albe