2016-11-18 6 views
0

내가 그 일을하고 어떻게 : 나는 다음과 같은 쿼리를 실행하면postgres_fdw를 사용하여 원격 db의 테이블을 업데이트하는 중 내가 여기서 무엇을하고 있습니까? 여기

CREATE EXTENSION IF NOT EXISTS postgres_fdw; 
    DROP SERVER IF EXISTS myserver CASCADE; 
    CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.1.1.1', dbname 'mydb', port '5432'); 
    DROP USER MAPPING IF EXISTS FOR user SERVER myserver; 

     CREATE USER MAPPING FOR user 
       SERVER myserver 
       OPTIONS (user 'user', password 'password'); 

     CREATE FOREIGN TABLE IF NOT EXISTS foriegnemployee(
     id int, 
     name text, 
     is_done boolean 
     ) 
      SERVER myserver 
      OPTIONS (schema_name 'myschema', table_name 'employee'); 

, 그것은 테이블 mydb.employee이 존재하지 않습니다 말한다 :

Update foriegnemployee set is_done=true where id in (select id from sometable); 

sometable 로컬 테이블입니다. 직원 테이블은 내가 당신의 테이블로 mockup 시도 원격 DB

+0

update foriegnemployee set is_done = true 여기서 id는 (select id from sometable)입니다. 나머지는 괜찮습니다. 올바른 원격 DB에 연결했는지 확인하십시오. .. –

+0

remotedb.employee 테이블을 업데이트하여 부울 열 is_done이 sometable – Tisha

+0

이라는 로컬 데이터베이스 테이블에있는 모든 ID에 대해 true로 설정되도록하려는 경우 코드에서 'FOREIGN TABLE FOR EXISTS foriegnemployee ...''foriegnemployee set is_done = true이어야합니다. 여기서 id는 (sometable로부터 select id); - 맞습니까? –

답변

1

에 있습니다

t=# create database b; 
CREATE DATABASE 
t=# \c b 
You are now connected to database "b" as user "vao". 
b=# create table employee (is_done boolean, user_id int); 
CREATE TABLE 
b=# insert into employee select false,1; 
INSERT 0 1 
b=# \c t 
You are now connected to database "t" as user "vao". 
t=# create extension postgres_fdw; 
CREATE EXTENSION 
t=# create server b foreign data wrapper postgres_fdw options (dbname 'b'); 
CREATE SERVER 
t=# create user mapping for vao server b; 
CREATE USER MAPPING 
t=# create foreign table ftb (is_done boolean, user_id int) server b options (table_name 'employee'); 
CREATE FOREIGN TABLE 
t=# Update ftb set is_done=true where user_id in (select user_id from employee); 
UPDATE 1 

코드가 작동합니다. 서버 또는 테이블에 잘못된 옵션이 있습니다.

+0

저는 mydb라는 데이터베이스를 가지고 있는데 그 안에 myschema라는 스키마가 있습니다. 잘 모르겠네요. – Tisha

+0

오, 그게 잘못된 서버에서 그것을 만들었고 올바른 서버에서 다시 만들면서, 그것이 이미 존재한다고 말했습니다. 휴! 감사합니다 @ Vao Tsun – Tisha

+0

걱정하지 마십시오. 니가 방금 옵션에서 길을 잃은 줄 알았다. –