PostgreSQL的:DBLINK在存储函数从本地到远程数据库(Postgresql: dblin

2019-10-17 04:50发布

我检查以下链接我用它和运行完美。 但我想这相反的东西。

PostgreSQL的:DBLINK在存储函数

我的情景:两个数据库都在那里。 我想从本地复制一个表中的数据到远程数据库。 我用这个dblink的使用,但我很困惑如何使用DBLINK来存储数据?

本地数据库名称:localdatabase

远程数据库名称:remotedatabase

任何一个可以建议我怎么能做到这一点?

提前致谢。

Answer 1:

像下面的线条的东西应该工作:

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电话。



文章来源: Postgresql: dblink in Stored Functions from local to remote database