2012-02-29 2 views
2

2 조인 데이터베이스에 문제가 있습니다.게시 - 두 데이터베이스를 조인 할 선택 쿼리를 만드는 방법?

SELECT * 
    FROM my_db1.table1 tb1 
LEFT JOIN my_db2.table2 tb2 ON tb2.code = tb1.code 

나는 다음과 같은 오류가 발생합니다 : :

schema "my_db2" does not exist.

그래서 나는 시도했다 : 첫째 .. 나는이 쿼리를 사용하려고

SELECT * 
    FROM dblink('my_db2', 'SELECT * FROM table2') 

를하지만 여전히 작동하지 않습니다.
다른 데이터베이스에있는 두 테이블에서 선택하려면 어떻게해야합니까?

답변

3

호출 사용자가 두 데이터베이스에 대해 필요한 권한을 가지고있는 동일한 클러스터의 두 데이터베이스에 대해 dblink과 함께 작동해야합니다. 당신의 db1에 연결에서 전화 :

SELECT * 
FROM table1 tb1 
LEFT JOIN (
    SELECT * 
    FROM dblink('dbname=db2','SELECT id, code FROM table2') 
    AS  tb2(id int, code text); 
    ) USING (code) 

두 가지가 누락했다 : 연결 문자열 및 열 정의 목록을.

그러나 뷰 또는 테이블 함수에서 외부 테이블에 대한 액세스를 캡슐화합니다. I quote the manual :

A convenient way to use dblink with predetermined queries is to create a view. This allows the column type information to be buried in the view, instead of having to spell it out in every query.

관련 문제