首页 文章

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

提问于
浏览
1

我检查下面链接,我使用和运行完美 . 但我想反对这件事 .

Postgresql: dblink in Stored Functions

我的场景:有两个数据库 . 我想将一个表数据从本地复制到远程数据库 . 我使用dblink这个用过,但我很困惑如何使用dblink存储数据?

本地数据库名称:localdatabase

远程数据库名称:remotedatabase

任何人都可以建议我怎么做?

提前致谢 .

1 回答

  • 2

    类似下面的行应该工作:

    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 调用之后还有其他的值返回语句 .

相关问题