web-dev-qa-db-fra.com

postgresql: les références inter-bases de données ne sont pas implémentées:

J'essaie de convertir la requête de jointure interne SQL en requête de jointure interne PostgreSQL. Dans cette requête de jointure interne, quelles tables utilisent que toutes les tables ne sont pas présentes dans une base de données. nous avons séparé les tables en deux bases de données, à savoir la base de données d'application et la base de données de sécurité

  1. les utilisateurs et la table de permissions sont présents dans la base de données de sécurité
  2. userrolemapping et le service sont présents dans l'application db

J'ai essayé comme ci-dessous mais je reçois l'erreur suivante

Erreur

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

fonction stockée 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;

Fonction enregistrée 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

Vous ne pouvez pas joindre des tables de différentes bases de données.

Les bases de données sont séparées logiquement dans PostgreSQL par leur conception.

Si vous souhaitez joindre les tables, vous devez les placer dans différents schémas d'une base de données plutôt que dans différentes bases de données.

Notez que ce qu'on appelle "base de données" dans MySQL est appelé "schéma" dans SQL standard.

Si vous avez vraiment besoin de joindre des tables de bases de données différentes, vous devez utiliser un wrapper de données étranger.

8
Laurenz Albe