2016-11-14 8 views
0

다음은 실행하려는 쿼리입니다.이 쿼리를 실행중인 현재 데이터베이스를 db1로하고 레코드를 삽입하려는 데이터베이스를 db2라고합시다. 당신이 볼 수 있듯이postgres_fdw를 사용하여 삽입 쿼리를 다른 데이터베이스에 공식화하는 방법은 무엇입니까?

insert into db2.employee(id, name, group) values(id, <db1.employee.name>, <db1.employee.group>) where id in (select id from archived limit 2); 

는 값은 DB1 (현재 데이터베이스)의 직원 테이블에서 선택하고 DB2의 직원 테이블에 삽입해야합니다.

나는 쿼리가 잘못되었다는 것을 알고있다. 그러나 나는 지금 내가하려고하는 것을 설명하기 위해 작성했다.

어떻게하면 postgres_fdw를 사용하여 쿼리를 공식화 할 수 있습니까?

내가이 쿼리를 사용하여 다른 방법으로 라운드 무언가를 시도

INSERT INTO employee select * from 
dblink('host=10.1.1.1 
user=user 
password=password 
dbname=mydb', 'select * from employee') tt(
     id int, 
    name character varying, 
); 

편집 : 원격 삽입 및 로컬 선택을하고 싶지 있습니다. db에서 대신 내 로컬 데이터베이스로 db2 쿼리를 실행할 때 위 쿼리를 사용할 수있는 것 같습니다

답변

1

MySQL에서 할 수있는 것처럼 다른 데이터베이스의 테이블에 직접 액세스 할 수 없습니다 (MySQL 데이터베이스은 PostgreSQL 스키마에 해당합니다.

그래서 아마 하나의 데이터베이스에서 다른 스키마를 사용하여 원하는 것을 얻을 수 있습니다.

다른 데이터베이스의 테이블을 실제로 업데이트해야하는 경우 외부 테이블에 액세스하려면 postgres_fdw 외부 데이터 래퍼를 사용해야합니다.

당신의이 db2에서 테이블을 가리키는 데이터베이스 db1foreign_employee –을 부르 자 외국 테이블 –을 정의해야합니다.

그럼 당신은 그런 식으로 그것을 할 수 있습니다 : 당신이 ORDER BY 하나를 강제하지 않는 한 쿼리 결과에 내재 된 순서가 없기 때문에 LIMIT가 여기에 조금 이상한 것을

INSERT INTO foreign_employee 
SELECT e.* 
FROM employee e 
    JOIN archived a USING id 
LIMIT 2; 

참고.

+0

다음 실제 테이블에 행을 삽입 - 외국 테이블에서 db2.employee - 어떻게 할 수 있습니까? – Tisha

+0

'db2.employee' *는 * 외부 테이블인가? 두 테이블에'WITH x AS (INSERT ... RETURNING ...) INSERT ... SELECT ... FROM x'와 같은 것을 사용하고 싶다면. –

+0

db2.employee는 db2에있는 실제 테이블입니다. 그것은 db1.employee와 동일한 스키마를 가지고 있습니다. – Tisha