gpt4 book ai didi

Postgresql:从本地到远程数据库的存储函数中的dblink

转载 作者:行者123 更新时间:2023-11-29 13:05:58 24 4
gpt4 key购买 nike

我检查了以下链接,我使用了它并且运行良好。但我想反对这件事。

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 注入(inject)漏洞引入您的系统。)

因为 dblink_exec 返回一个关于它做了什么的文本消息,你必须将你的函数定义为 RETURNS text 除非在 之后有其他返回值的语句>dblink_exec 调用。

关于Postgresql:从本地到远程数据库的存储函数中的dblink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com