代码之家  ›  专栏  ›  技术社区  ›  MattRgx

postgresql中的动态dblink

  •  0
  • MattRgx  · 技术社区  · 3 年前

    我有一段代码:

    do $$
    declare 
    port int;
    dbname varchar;
    begin
        select current_database() into dbname;
    
        select setting into port from pg_catalog.pg_settings where name = 'port';
    
        perform format ('select dblink_connect(''toto'', ''port=%s dbname=%s'')', port, dbname);
    
        perform dblink_disconnect('toto');
    end $$;
    

    但当我运行它时,它说当我试图断开它时,我的“toto”连接不存在。

    我试过很多东西,但都没用。我认为我的dblink_connect有问题,不知怎么的,它没有创建连接。

    谢谢你的帮助。

    0 回复  |  直到 3 年前
        1
  •  1
  •   jjanes    3 年前

    执行格式化函数,获得一个看起来像SQL查询的文本结果,然后将其丢弃。因为PERFORM就是这么做的。

    也许您打算执行该字符串,而不是将其丢弃。 但是,首先我可以看到,没有理由在这里使用动态查询。您也可以在静态查询中使用“format”。

    do $$
    declare 
    port int;
    dbname varchar;
    begin
        select current_database() into dbname;
        select setting into port from pg_catalog.pg_settings where name = 'port';
        perform dblink_connect('toto', format('port=%s dbname=%s', port, dbname));
        perform dblink_disconnect('toto');
    end $$;