我检查以下链接我用它和运行完美。 但我想这相反的东西。
PostgreSQL的:DBLINK在存储函数
我的情景:两个数据库都在那里。 我想从本地复制一个表中的数据到远程数据库。 我用这个dblink的使用,但我很困惑如何使用DBLINK来存储数据?
本地数据库名称:localdatabase
远程数据库名称:remotedatabase
任何一个可以建议我怎么能做到这一点?
提前致谢。
我检查以下链接我用它和运行完美。 但我想这相反的东西。
PostgreSQL的:DBLINK在存储函数
我的情景:两个数据库都在那里。 我想从本地复制一个表中的数据到远程数据库。 我用这个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
电话。