2

我想將db_A中的表tbl_A中的前20個ROWS插入到db_B中的tbl_B中。
爲tbl_A和tbl_B的模式是:Postgresql:存儲函數中的dblink

CREATE TABLE <tbl_name> (
id serial PRIMARY KEY, 
int a, 
int b 
); 

我有與下列查詢

psql db_A 
SELECT dblink_connect("dbname=db_B"); 
SELECT dblink_open('curse', 'SELECT id, a, b FROM tbl_B'); 
INSERT INTO tbl_A (SELECT id, a, b FROM dblink_fetch('curse', 20) AS (s_is int, s_a int, s_b int)) RETURNING a; 
  • 一些問題,我可以把下面的語句中的存儲過程:
  • 是否有可能創建一個包含上述三個語句的存儲過程,併爲該過程創建一個準備好的語句。

我將非常感激,如果有人可以在實踐中是使用光標有多好,或者使用內部DBLINK存儲過程或以上,實現更優雅的任何其他方式發表意見。

回答

4

有更簡單的方法:

連接到db_B並執行以下命令:

CREATE OR REPLACE FUNCTION dblink(text, text) 
RETURNS SETOF record AS 
    '$libdir/dblink', 'dblink_record' 
    LANGUAGE 'c' VOLATILE STRICT 
    COST 1 
ROWS 1000; 
ALTER FUNCTION dblink(text, text) OWNER TO postgres; 
GRANT EXECUTE ON FUNCTION dblink(text, text) TO public; -- or whatever 

INSERT INTO tbl_B select * from 
(SELECT * from dblink('hostaddr=localhost port=5432 dbname=db_A user=postgres password=postgres', 
'select id, a, b from tbl_A limit 20 ' 
) 
t(
    id integer, 
    a integer, 
    b integer 
)) as q; 
+0

是否有可能更新DBLINK的幫助程序查詢? – PrashantAdesara 2012-09-10 07:05:39

+0

Concider將在最後一個調用'dblink'函數的參數中編寫的任何東西作爲SQL,它應該在遠程數據庫上執行。 – ertx 2012-09-10 08:42:22

相關問題