我檢查下面的鏈接,我使用和完美運行。但我想對這件事情。Postgresql:dblink從本地到遠程數據庫的存儲功能
Postgresql: dblink in Stored Functions
我的情景:兩個數據庫都在那裏。我想從本地數據庫複製一個表數據。我用這個dblink使用,但我很困惑如何使用dblink來存儲數據?
本地數據庫名稱:localdatabase
遠程數據庫名稱:remotedatabase
任何一個可以建議我怎麼能做到這一點?
在此先感謝。
我檢查下面的鏈接,我使用和完美運行。但我想對這件事情。Postgresql:dblink從本地到遠程數據庫的存儲功能
Postgresql: dblink in Stored Functions
我的情景:兩個數據庫都在那裏。我想從本地數據庫複製一個表數據。我用這個dblink使用,但我很困惑如何使用dblink來存儲數據?
本地數據庫名稱:localdatabase
遠程數據庫名稱:remotedatabase
任何一個可以建議我怎麼能做到這一點?
在此先感謝。
類似下面的行應該工作:
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
之後還有其他值返回語句。
有沒有可能在dblink的幫助下用程序更新查詢? – PrashantAdesara
基本上在答案中描述的方法將適用於你。你必須用dblink_exec()來替換dblink(),dblink_exec()將用於不返回行的SQL語句(如你的案例中的'INSERT')。 – dezso
感謝您的快速回復,但我想插入本地到遠程數據庫的所有數據。在那個時候,我在本地,並希望使用dblink傳輸所有數據。可能嗎? – PrashantAdesara
請在下面檢查我的答案。 – dezso