2012-09-06 2 views
1

완벽하게 사용하고 실행중인 아래 링크를 확인합니다. 그러나 나는이 일에 반대하고 싶다.Postgresql : 로컬 데이터베이스에서 로컬 데이터베이스로의 저장 함수에서의 dblink

Postgresql: dblink in Stored Functions

내 시나리오 : 두 개의 데이터베이스가 있습니다. 하나의 테이블 데이터를 로컬 데이터베이스에서 원격 데이터베이스로 복사하려고합니다. 나는 이것을 사용하기 위해 dblink를 사용했지만 dblink를 사용하여 데이터를 저장하는 방법을 혼란 스럽습니다.

지역 데이터베이스 이름 :

를 localdatabase

원격 데이터베이스 이름 : 나는이 작업을 수행 할 수있는 방법

어느 한 날을 제안 할 수 remotedatabase?

미리 감사드립니다. 아래의 라인과 같은

+0

기본적으로 거기에있는 대답에 설명 된 접근 방식이 효과가 있습니다. dblink()를 dblink_exec()로 대체해야합니다. dblink_exec()는 행을 반환하지 않는 SQL 문 (예 : 'INSERT')에 사용됩니다. – dezso

+0

빠른 답장을 보내 주셔서 감사합니다.하지만 모든 데이터를 로컬 데이터베이스에서 원격 데이터베이스로 삽입하려고합니다. 그리고 그 시간에 저는 로컬 사이드에 있으며 dblink를 사용하여 모든 데이터를 전송하려고합니다. 가능한가? – PrashantAdesara

+0

아래 내 대답을 확인하십시오. – dezso

답변

2

뭔가 작업을해야합니다 :

test는 다음과 같은 정의와 원격 데이터베이스에서 테이블을이다
SELECT dblink_connect('hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd'); 
-- change the connection string to your taste 

SELECT dblink_exec('INSERT INTO test (some_text) VALUES (''Text go here'');'); 

: dblink_exec()를 실행 한 후

CREATE TABLE test(
    id serial 
    , some_text text 
); 

, 당신이 결과를 확인하실 수 있습니다 원격 데이터베이스 (또는 아래 예제에서와 같이 로컬로 dblink() 사용).

SELECT * FROM dblink('SELECT id, some_text FROM test') AS d(id integer, some_text text); 
id | some_text 
----+-------------- 
    1 | Text go here 
(1 row) 

당신은뿐만 아니라 기능에 dblink_exec 전화를 포장 할 수 있습니다 : 당신이 볼 수 있듯이

CREATE OR REPLACE FUNCTION f_dblink_test_update(val text, id integer) RETURNS text AS 
$body$ 
SELECT dblink_exec('UPDATE torles.test SET some_text=' || quote_literal($1) || ' WHERE id = ' || $2); 
$body$ 
LANGUAGE sql; 

, 당신도 동적으로 쿼리 문자열을 구축 할 수 있습니다. (당신이 당신의 시스템에이 방법은 SQL 주입 취약점을 소개하지 않도록주의 할 필요가 있기 때문에 나는이 방법을 옹호하지 않는 것이.)

이 무슨 짓을했는지에 대한 문자 메시지와 dblink_exec 반환 때문에, 당신은 정의해야 dblink_exec 호출 후에 다른 값을 반환하는 명령문이 없으면 사용자의 기능은 RETURNS text입니다.

+0

dblink를 사용하여 프로 시저로 쿼리를 업데이트 할 수 있습니까? – PrashantAdesara