2012-09-06 93 views
1

我檢查下面的鏈接,我使用和完美運行。但我想對這件事情。Postgresql:dblink從本地到遠程數據庫的存儲功能

Postgresql: dblink in Stored Functions

我的情景:兩個數據庫都在那裏。我想從本地數據庫複製一個表數據。我用這個dblink使用,但我很困惑如何使用dblink來存儲數據?

本地數據庫名稱:localdatabase

遠程數據庫名稱:remotedatabase

任何一個可以建議我怎麼能做到這一點?

在此先感謝。

+0

基本上在答案中描述的方法將適用於你。你必須用dblink_exec()來替換dblink(),dblink_exec()將用於不返回行的SQL語句(如你的案例中的'INSERT')。 – dezso

+0

感謝您的快速回復,但我想插入本地到遠程數據庫的所有數據。在那個時候,我在本地,並希望使用dblink傳輸所有數據。可能嗎? – PrashantAdesara

+0

請在下面檢查我的答案。 – dezso

回答

2

類似下面的行應該工作:

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'');'); 

test中,列出了以下定義遠程數據庫:

CREATE TABLE test(
    id serial 
    , some_text text 
); 

運行dblink_exec()後,您可以檢查結果遠程數據庫(或本地,使用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回報有什麼它做了一個短信,你必須定義您的功能爲RETURNS text,除非在調用dblink_exec之後還有其他值返回語句。

+0

有沒有可能在dblink的幫助下用程序更新查詢? – PrashantAdesara

相關問題