postgresql: as referências cruzadas de bases de dados não estão implementadas:
estou a tentar converter a consulta de junção interna SQL em consulta de junção interna PostgreSQL. Nesta consulta interna join que tabelas estão usando que todas as tabelas não estão presentes em um banco de dados. separámos as tabelas em duas bases de dados, ou seja, dB de aplicação e db de segurança
- Os Utilizadores e a tabela de permissões estão presentes na segurança db
- a utilização e o serviço estão presentes na aplicação db
Erro
ERROR: cross-database references are not implemented: "Rockefeller_ApplicationDb.public.userrolemapping"
LINE 4: INNER JOIN "Rockefeller_ApplicationDb".public.userro..
função armazenada 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;
Função Armazenada 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;
1
Author: SpringUser, 2018-08-10
1 answers
Não pode juntar-se a tabelas de diferentes bases de dados.
As bases de dados estão logicamente separadas em PostgreSQL por desenho.
Se quiser juntar-se às tabelas, deve colocá-las em esquemas diferentes numa base de dados e não em bases de dados diferentes.
Note que o que é chamado de "banco de dados" no MySQL é chamado de "esquema" no SQL padrão.
1
Author: Laurenz Albe, 2018-08-10 12:43:05